Java输入&输出数组

时间:2015-05-05 19:59:22

标签: java

处理一个java程序,该程序读取带有一堆帐号的txt文件。用户输入帐号如果匹配程序响应说明其有效的帐号,如果它没有响应无效。这是我的类打开文件并检查它是否是有效数字。当我运行代码时,它总是回来说即使我测试的帐号有效,帐号也是无效的。

public class Validator {

    public boolean isValid(int number) throws IOException {


        final int SIZE = 17;
        int[] numbers = new int[SIZE];
        boolean found = false;
        int index = 0;


        File file = new File("src/Accounts.txt");
        Scanner inputFile = new Scanner(file);

        while (inputFile.hasNext() && index < numbers.length) {

            numbers[index] = inputFile.nextInt();
            index++;

        }

        while (!found && index < SIZE) {

            if (numbers[index] == (number))
                found = true;
            else
                index++;
        }
        return found;
    }
}

4 个答案:

答案 0 :(得分:1)

你应该在第二次循环之前将索引重置为0。否则,将不会输入第二个循环,因为第一个循环已经增加index超过从文件读取的最后一个帐号的索引。

while (inputFile.hasNext() && index < numbers.length) {

    numbers[index] = inputFile.nextInt();
    index++;

}

index = 0; // add this

while (!found && index < SIZE) {

    if (numbers[index] == (number))
        found = true;
    else
        index++;
}
return found;

答案 1 :(得分:1)

我已经简化了你的代码了。您可以浏览文件并同时查看。

public boolean isValid(int number) {
    try (Scanner scanner = new Scanner(new File("src/Accounts.txt"))) {
        while (scanner.hasNextInt()) {
            if (scanner.nextInt() == number) {
                return true;
            }
        }
    }

    return false;
}

答案 2 :(得分:1)

我也简化了你的代码,但我发现帐号的参数类型可能存在问题。 您的帐户可以超过&#34; 2,147,483,647&#34 ;? (http://www.tutorialspoint.com/java/java_basic_datatypes.htm

如果答案是肯定的,那么你就会遇到问题。

简化代码如下:

public boolean isValid(long number) {
    long accountNumber;

    File file = new File("src/Accounts.txt");
    Scanner inputFile = null;
    try {
        inputFile = new Scanner(file);
        while (inputFile.hasNext()) {
            accountNumber = inputFile.nextLong();
            if (accountNumber == number) {
                return true;
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
        if (inputFile != null) {
            inputFile.close();
        }
    }
    return false;
}

答案 3 :(得分:0)

解决问题后,您可以尝试使用java 8的另一种优雅方式:

public boolean isValid(int number) throws IOException{

        return Files.lines(Paths.get("src/Accounts.txt")).anyMatch(
                    num -> num.trim().equals(String.valueOf(number)));

}