在主要功能中使用超出范围的变量

时间:2019-02-26 21:51:03

标签: java

我有这种方法,如果没有参数,则使用标准文件,否则使用参数中的一个。

(32,5,1999) becomes (TRUE && FALSE && FALSE) = FALSE
(5,6,900) becomes (FALSE && FALSE && TRUE) = FALSE

但是,if(day<1||day>31 || month<1||month>12 || year<1000||year>9999){ ... } 超出范围错误。我知道为什么,因为它在public class MainAnimal { public static void main(String[] args) { Parser parse = new Parser(); if ((args == null) || (args.length == 0)) { File file = parse.getFile("findAnAnimal.csv"); } else { System.out.println(args[0]); } List<String[]> animalList = parse.readFileAndParse(Paths.get(String.valueOf(file))); 块中是本地的。但是,有什么解决方法呢?

2 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是更改​​此代码段:

if ((args == null) || (args.length == 0)) {
   File file = parse.getFile("findAnAnimal.csv");
} else {
   System.out.println(args[0]);
}

进入:

File file = null;
if ((args == null) || (args.length == 0)) {
   file = parse.getFile("findAnAnimal.csv");
} else {
   System.out.println(args[0]);
}

请记住您的最后一行:

 List<String[]> animalList = parse.readFileAndParse(Paths.get(String.valueOf(file)));

假定该文件不为空。您应该事先检查文件是否为空,或者在获取文件后立即将if ... else块放入现有文件中。

答案 1 :(得分:0)

只需在if / else块下面声明文件。在if块上方设置一个默认为'findAnAnimal.csv'的“文件名”变量,如果存在参数则将其覆盖。这样会更健壮。

public class MainAnimal {
    public static void main(String[] args) {
        Parser parse = new Parser();
        String filename = "findAnAnimal.csv"
        if ((args == null) || (args.length == 0)) {
            // do nothing
        } else {
            filename = args[0];
        }

        System.out.println("reading " + filename);
        File file = parse.getFile(filename);
        List<String[]> animalList = parse.readFileAndParse(Paths.get(String.valueOf(file)));