Try-and-catch方法不适用于java
我一直在尝试设置try/catch,但它似乎既没有运行try部分,也没有运行catch部分,只是返回变量的默认值 我以前用过它,但不记得我换了什么,因为我已经有一段时间没碰它了 如果需要,我可以包括数据文件 有什么想法吗Try-and-catch方法不适用于java,java,Java,我一直在尝试设置try/catch,但它似乎既没有运行try部分,也没有运行catch部分,只是返回变量的默认值 我以前用过它,但不记得我换了什么,因为我已经有一段时间没碰它了 如果需要,我可以包括数据文件 有什么想法吗 package firsttry; import java.io.File; import java.io.FileNotFoundException; import java.util.InputMismatchException; import java.util.Sc
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?(此处初始化?
double blockbreak=0;
)
如果是这样的话,您应该调查循环中发生了什么
这个if语句看起来很狡猾
if(值[1]。等于(块))
你预计会发生什么
另外,请发布一行与if语句匹配的行和一行不匹配的行,以及函数的预期输出。没有足够的信誉来评论,所以请写在这里 您应该在上面编写的每个函数()中修改if条件
if (values[1].equals(block)){
}
它不会提供您期望的输出
例如,将字符串与int进行比较是不正确的
System.out.println("1".equals(1)); -> will print false
仅获取默认值的可能原因:
data.csv
是一个空文件值[1]。等于(块)
返回false。(由于要将字符串
与int
进行比较,因此情况总是如此)catch(FileNotFoundException e)
不执行任何操作,因此您不知道是否未找到该文件详述第2点,考虑<代码>值[1 ]。等于(Stras.Valueof(块)< <代码> < /P> > P>让我提出一些故障排除提示。
编写一个单元测试,以便轻松地重复运行 将System.out.println放在代码中的几个位置,看看它会在什么地方出现,什么时候出现(对于小问题,这通常比调试容易,如果您通常不进行调试,我通常会让它在任何代码的开头打印一个字母,这些代码位于决策点之后,比如if、loop和try/catch构造) 在阅读时打印出每行的值 打印blockbreak的值 我猜您的循环或if语句没有执行。打印一些值会很快告诉您这一点此外,如果您确实希望为Blockbreak指定一个值,请尝试在开始时不指定默认值0。这将阻止您编译,直到您在每个可能的程序流路径中都分配了一个值——这是一个非常方便的功能(在您的情况下可能没有帮助,因为您的while循环是结构化的,但是在Java中,在需要之前不分配初始值是一个有用的习惯)。哪种方法?它返回哪个默认值?假设你不知道密码,这个问题容易回答吗?您是否使用调试器逐步完成了代码?它的作用是什么?而且代码缩进非常不正确,所以我不太愿意把你当回事,因为你没有采取最简单的步骤自己解决问题。编辑您的问题,将您收到的确切错误包含在代码下方。
data.csv
中是否有数据?这需要断点。你可以看到这个值是什么,循环了多少次等等。也许你的条件不起作用……是的,里面有大约25行的数据