处理一个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;
}
}
答案 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)));
}