java - I/O-TxtFile 行距程序| JAVA
问题描述
我正在尝试编写一个循环通过 .txt 输入文件的实验室/程序。将整行数据作为字符串读取,然后将该字符串拆分为由空格分隔的数组。如果结果数组中有 4 个项目,并且每个项目都是有效的双精度,我希望它确定点之间的距离并将信息返回到单独的 output.txt 文件。
我遇到的问题是无法让 x1,x2,y1,y2 全部通过 if 语句if(testDoubleLow()){
如果我要写这个,if(testDoubleLow(item1,0)){
那么它只会验证 x1 或 txt 行上的第一个输入?
{我的代码}
import java.io.*;
import java.util.Scanner;
public class RLabs {
public static void main(String[] args) throws FileNotFoundException {
double dealtaX, deltaY, distance, x1, y1, x2, y2;
String Line, item1, item2, item3, item4;
String[] Sect;
Scanner inFile;
PrintWriter outFile;
System.out.println("I/O File Line Distance Program Starting. Opening file...");
System.out.println("Please ensure data is entered per line in the format of (X1 Y1 X2 Y2).");
inFile = new Scanner(new File("input.txt"));
outFile = new PrintWriter(new File("countresults.txt"));
while (inFile.hasNext()) {
Line = inFile.nextLine();
Sect = Line.split(" ");
if (Sect.length == 4) {
item1 = Sect[0];
item2 = Sect[1];
item3 = Sect[2];
item4 = Sect[3];
outFile.printf(Line);
if (testDoubleLow()) {
x1 = Double.parseDouble(item1);
y1 = Double.parseDouble(item2);
x2 = Double.parseDouble(item3);
y2 = Double.parseDouble(item4);
dealtaX = (x2 - x1);
deltaY = (y2 - y1);
distance = Math.sqrt(Math.pow(deltaY, 2) + Math.pow(dealtaX, 2));
outFile.printf(" The distance between (%1.1f,%1.1f) and (%1.1f,%1.1f) is %1.1f\n",
x1, y1, x2, y2, distance);
}
} else {
outFile.println("Line did not have 4 item(s)");
}
}
outFile.close();
inFile.close();
System.out.println("Done...");
}
private static boolean testDoubleLow(String token, double l) {
if (testDouble(token)) {
double num = Double.parseDouble(token);
if (num > l) {
return true;
}
}
return false;
}
private static boolean testDouble(String s) {
try {
Double.parseDouble(s);
return true;
} catch (Exception e) {
return false;
}
}
}
解决方案
import java.io.*;
import java.util.Scanner;
public class RLabs {
public static void main(String[] args) throws FileNotFoundException {
double dealtaX, deltaY, distance,x1, y1, x2, y2;
String Line, item1, item2, item3, item4;
String[] Sect;
Scanner inFile;
PrintWriter outFile;
System.out.println("I/O File Line Distance Program Starting. Opening file...");
System.out.println("Please ensure data is entered per line in the format of (X1 Y1 X2 Y2).");
inFile = new Scanner(new File("input.txt"));
outFile = new PrintWriter(new File("countresults.txt"));
while(inFile.hasNext()){
Line = inFile.nextLine();
Sect = Line.split(" ");
if(Sect.length == 4) {
item1 = Sect[0];
item2 = Sect[1];
item3 = Sect[2];
item4 = Sect[3];
if(testDoubleLow(item1,0)&&(testDoubleLow(item2,0)&&(testDoubleLow(item3,0)&&(testDoubleLow(item4,0))))){
x1 = Double.parseDouble(item1);
y1 = Double.parseDouble(item2);
x2 = Double.parseDouble(item3);
y2 = Double.parseDouble(item4);
dealtaX = (x2-x1);
deltaY = (y2-y1);
distance = Math.sqrt(Math.pow(deltaY,2)+ Math.pow(dealtaX,2));
outFile.printf(Line);
outFile.printf(" The distance between (%1.1f,%1.1f) and (%1.1f,%1.1f) is %1.1f\n", x1,y1,x2,y2,distance);
}
else {
outFile.println("Line did not correct data");
}
}
else {
outFile.println("Line did not have 4 item(s)");
}
}
outFile.close();
inFile.close();
System.out.println("Done...");
}
private static boolean testDoubleLow(String token, double l){
if(testDouble(token)) {
double num = Double.parseDouble(token);
if(num > l ) {
return true;
}
}
return false;
}
private static boolean testDouble(String s) {
try {
Double.parseDouble(s);
return true;
}
catch(Exception e) {
return false;
}
}
}
我不知道这是否是一个正确的答案,或者只是一种临时的获得方式,但我希望这可能是正确的?if(testDoubleLow(item1,0)&&(testDoubleLow(item2,0)&&(testDoubleLow(item3,0)&&(testDoubleLow(item4,0))))){
推荐阅读
- java - java.lang.IllegalArgumentException:比较方法违反了它的一般合同[dup]
- python - POST方法python - 检查状态码
- numpy - 我应该在 numpy 数组上运行 keras pad_sequence
- jquery - jquery - 查找通过单击多个元素之一触发的特定 ajax 调用是否完成
- php - Phalcon ORM - integer field id is string after save
- node.js - Loopback 远程方法调用了两次
- java - 我想用 Java 多次读取同一个文件
- matplotlib - pyplot的xscale日志标签重叠
- geotiff - 从 geotiff 栅格文件中获取列值
- python - 按索引列分组比较它们的区域并将值添加到 Python 中的新列?