我想从一个文本文件,里面充满整数读入数据,并有程序打印这些整数输出到屏幕,同时对它们求和。 这不应该是困难的,但我不能弄清楚!
这里是非常简单的文本文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
这里是我的代码是这样运作的:
import java.util.*;
import java.io.File;
import java.io.IOException;
public class ReadFile
{
public static void main(String[] args)
throws IOException
{
Scanner textfile = new Scanner(new File("Some_Numbers.txt"));
filereader(textfile);
}
static void filereader(Scanner textfile)
{
int i = 0;
int sum = 0;
while(i <= 19)
{
System.out.println(textfile.nextInt());
sum = sum + textfile.nextInt();
i++;
}
}
}
最后,这里是输出我得到:
1
3
5
7
9
11
13
15
17
19
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:838)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at ReadFile.filereader(ReadFile.java:23)
at ReadFile.main(ReadFile.java:12)
你是在循环中调用textfile.nextInt()的两倍。 尝试:
static void filereader(Scanner textfile)
{
int i = 0;
int sum = 0;
while(i <= 19)
{
int nextInt = textfile.nextInt();
System.out.println(nextInt);
sum = sum + nextInt;
i++;
}
}
你永远不增加i
的,所以while循环继续超出文件的末尾。 至于总结,做这样的事情。
static void addstuff(Scanner aScanner) {
int sum = 0;
while (aScanner.hasNextInt()) {
sum += aScanner.nextInt();
}
System.out.println(sum);
}
这将持续到hasNextInt()返回false,当扫描仪看到的下一个项目是不是整数发生。 这可能是非数字输入或文件的末尾。 这意味着你不再局限于25个整数 - 它会在停止之前尽量多看,因为它可以。
因为你永远不增加i
,它永远不会从0变化,所以它总是小于25。这意味着它会尝试再次看它做了25元后,但没有26日,因此有一个例外。
代替的while
循环,我会建议for
循环。
总之他们,而不是打印出来,只需添加到累加器。
int accumulator = 0;
for(int i = 0; i < 25; i++)
accumulator += aScanner.nextInt();
System.out.println(accumulator);
应打印出总和。
除了lockstock的答案,你可能需要考虑增加textfile.hasNext()或textfile.hasNextInt()为您while循环。
static void filereader(Scanner textfile) {
int sum = 0;
while(textfile.hasNextInt()) {
int nextInt = textfile.nextInt();
System.out.println(nextInt);
sum += nextInt;
}
}
你将不得不做以下的事情
while(i < 25)
{
System.out.println(aScanner.nextInt());
i++ ;
}
它抛出一个异常,因为你不会增加i
的循环。 在情况下,如果整数的输入文件的数量是未知的,你可以使用Scanner.hasNextInt()
方法来检查下一个整数的存在(或只是使用hasNext()
检查EOF)。
你可以归纳像下面的代码片段的数字:
...
int sum = 0;
while(i++ < 25)
{
sum += aScanner.nextInt();
}
要么
...
int sum = 0;
while(aScanner.hasNextInt())
{
sum += aScanner.nextInt();
}
你所得到的错误(异常),因为你的文件有不适合于整数类型非常大的数字。 你应该使用长 。
因此,使用方法: aScanner.nextLong()
代替aScanner.nextInt()
编辑:你也应该改变的类型sum
变量从int
到long
。
您的代码将正常工作。
1.你i
永远不会增加。
2.你是不是添加了数字。
3. addstuff(diskScanner)
是一个static memeber
,因此与类名点操作符调用它。
例如:
Add.addstuff(diskScanner);
static void addstuff(Scanner aScanner)
{
int i = 0;
long l = 0;
while(i < 25)
{
l = i + l;
i++;
}
System.out.println(l);
}