我正在尝试从用户那里获取输入,然后如果它与其中一个现有文件匹配,则读取该文件并将单词,字母或数字放入数组中。 “单词”和“字母”文件似乎工作正常,但“数字”给了我一个问题。它找到文件,读取它,将它放入一个数组中,然后给出数字的总和;但是,数组的输出是所有其他数字,而不是所有数字,就像它应该做的那样。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
public class fileIO
{
public static void main (String[] args) throws FileNotFoundException
{
String filename;
System.out.println("Please enter name of file (alphabet,words,numbers): ");
Scanner input = new Scanner(System.in);
filename = input.nextLine();
if(filename.equals("numbers"))
{
int sum = 0;
Scanner reader = new Scanner(new File("/home/ninjew/workspace/FileIO/src/" + filename + ".txt"));
ArrayList<Integer> arr = new ArrayList<Integer>();
while(reader.hasNext())
{
arr.add(reader.nextInt());
sum = sum + reader.nextInt();
}
System.out.println(arr);
System.out.println("The summation is: " + sum);
reader.close();
}
else if(filename.equals("words") || filename.equals("alphabet"))
{
Scanner reader = new Scanner(new File("/home/ninjew/workspace/FileIO/src/" + filename + ".txt"));
// This is for words and letters within the file. Print words and letters.
ArrayList<String> arr = new ArrayList<String>();
while(reader.hasNext())
{
String line = reader.next();
Scanner scanner = new Scanner(line);
scanner.useDelimiter(",");
while(scanner.hasNext()){
arr.add(scanner.next());
}
scanner.close();
}
System.out.println(arr);
reader.close();
}
}
}
答案 0 :(得分:4)
在if(filename.equals("numbers"))
中,您正在对此块中的文件进行两次读取,这就是为什么它会跳过数字
while(reader.hasNext())
{
arr.add(reader.nextInt());
sum = sum + reader.nextInt();
}
应该是
while(reader.hasNext())
{
int val = reader.nextInt();
arr.add(val);
sum = sum + val;
}
答案 1 :(得分:1)
您的数字阅读器循环正在向数组添加第一个数字,将下一个数字添加到总和中。
如果输入为1 2 3 4 5 6
,则数组为[1, 3, 5]
,您的总和为2 + 4 + 6 = 12.
答案 2 :(得分:1)
您正在一次性阅读下两个整数。每次调用scanner.nextInt()
时,它都会读取下一个int。您需要将nextInt存储在临时变量中并在两个位置使用它。
while(reader.hasNext())
{
int next = reader.nextInt();
arr.add(next);
sum = sum + next;
}