尝试和捕获方法不工作java

时间:2015-07-13 19:37:30

标签: java

我一直试图让我的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;
}


}

4 个答案:

答案 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)

您只获得默认值的可能原因:

  1. data.csv是一个空文件。
  2. values[1].equals(block)返回false。 (由于您将Stringint进行比较,情况总是如此。)
  3. catch (FileNotFoundException e)没有做任何事情,所以你不知道是否找不到该文件。
  4. 详细说明第2点,请考虑values[1].equals(String.valueOf(block))

答案 3 :(得分:0)

让我建议一些疑难解答提示。

编写单元测试,以便您可以轻松地重复运行。

将System.out.println放入几个地方的代码中以查看它命中的位置和时间(如果您通常不调试,这通常比调试更容易,我常常打印出来在决策点之后的任何代码的开头写的字母,如if,loop和try / catch构造。)

在阅读时打印出每一行的值。

打印blockbreak的值

我猜你的循环或if语句没有执行。打印一些值会很快告诉你。

此外,如果您真的打算为Blockbreak分配值,请尝试不在开头指定默认值0。这将阻止您编译,直到您在每个可能的程序流路径中分配了一个值 - 这是一个非常方便的功能(由于您的while循环结构的方式可能对您的情况没有帮助,但是这是一个不分配初始值的有用习惯值,直到你需要在Java)。