我一直试图让我的try / catch设置工作,但它似乎没有运行try部分或catch部分,只返回变量的默认值。
我以前工作过,不记得我改变了是什么因为我暂时没碰过它
如果需要,我可以包含数据文件
有什么想法吗?
package firsttry;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.InputMismatchException;
import java.util.Scanner;
public class csv{
public double speed(int tool , int block){
double blockbreak = 0;
//Define file variable thing
//runs through file
try {
String filename = "data.csv";
File file = new File(filename);
Scanner inputStream = new Scanner(file);
//runs through each line as long as there is something next
while (inputStream.hasNext()){
String data = inputStream.next();//gets a whole line
String[] values = data.split(",");
if (values[1].equals(block)){
blockbreak = Double.parseDouble(values[tool + 2]);
System.out.println(blockbreak);
blockbreak = 4;
}
}
}catch (Exception e) {
System.out.println("ERROR");
blockbreak = 4;
}
return blockbreak;
}
public String name(int block){
String filename = "data.csv";
File file = new File(filename);
//runs through file
try {
Scanner inputStream = new Scanner(file);
//runs through each line as long as there is something next
while (inputStream.hasNext()){
String data = inputStream.next();//gets a whole line
String[] values = data.split(",");
if (values[1].equals(block)){
//int speed = Integer.parseInt(values[tool]);
String blockname = values[0];
return blockname;
}
}
} catch (FileNotFoundException e) {
}
return filename;
}
}
答案 0 :(得分:1)
没有足够的声誉来评论,所以写在这里。
你应该修改上面写的每个函数()中的if条件,
if (values[1].equals(block)){
}
它不会为您提供您期望的输出。
将字符串与int进行比较是不正确的,例如
System.out.println("1".equals(1)); -> will print false
答案 1 :(得分:0)
您正在观察正在返回默认值。
这是否意味着你的函数返回0? (如此处初始化?double blockbreak = 0;
)
如果是这种情况,你应该研究循环中会发生什么。
这个if语句看起来很狡猾。
if (values[1].equals(block))
您期望发生什么?
另外,请发布与if语句匹配的行和不匹配的行,以及函数的预期输出。
答案 2 :(得分:0)
您只获得默认值的可能原因:
data.csv
是一个空文件。values[1].equals(block)
返回false。 (由于您将String
与int
进行比较,情况总是如此。)catch (FileNotFoundException e)
没有做任何事情,所以你不知道是否找不到该文件。详细说明第2点,请考虑values[1].equals(String.valueOf(block))
答案 3 :(得分:0)
让我建议一些疑难解答提示。
编写单元测试,以便您可以轻松地重复运行。
将System.out.println放入几个地方的代码中以查看它命中的位置和时间(如果您通常不调试,这通常比调试更容易,我常常打印出来在决策点之后的任何代码的开头写的字母,如if,loop和try / catch构造。)
在阅读时打印出每一行的值。
打印blockbreak的值
我猜你的循环或if语句没有执行。打印一些值会很快告诉你。
此外,如果您真的打算为Blockbreak分配值,请尝试不在开头指定默认值0。这将阻止您编译,直到您在每个可能的程序流路径中分配了一个值 - 这是一个非常方便的功能(由于您的while循环结构的方式可能对您的情况没有帮助,但是这是一个不分配初始值的有用习惯值,直到你需要在Java)。