Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Try-and-catch方法不适用于java_Java - Fatal编程技术网

Try-and-catch方法不适用于java

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

我一直在尝试设置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?(此处初始化?
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行的数据