我想从一个充满整数的文本文件中读取数据,并让程序在将它们相加的同时将这些整数打印到屏幕上。这应该不难,但我无法弄清楚!!!
这是极简化的文本文件:
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)
答案 0 :(得分:4)
您永远不会增加i
,因此while循环将继续超出文件末尾。至于求和,做这样的事情。
static void addstuff(Scanner aScanner) {
int sum = 0;
while (aScanner.hasNextInt()) {
sum += aScanner.nextInt();
}
System.out.println(sum);
}
这将一直运行直到hasNextInt()返回false,这在扫描器看到的下一个项目不是整数时发生。这可以是非数字输入或文件末尾。这意味着你不再局限于25个整数 - 它会在停止之前尽可能多地读取。
答案 1 :(得分:4)
因为你永远不会增加i
,所以它永远不会从0变化,所以它总是小于25.这意味着它在完成25个元素后会再次尝试,但是没有第26个,所以有一个异常。
我建议使用while
循环而不是for
循环。
要对它们求和,而不是将它们打印出来,只需添加到累加器即可。
int accumulator = 0;
for(int i = 0; i < 25; i++)
accumulator += aScanner.nextInt();
System.out.println(accumulator);
应打印出总和。
答案 2 :(得分:3)
您在循环中调用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++;
}
}
答案 3 :(得分:2)
除了lockstock的答案,你可能还想考虑为你的while循环添加textfile.hasNext()或textfile.hasNextInt()。
static void filereader(Scanner textfile) {
int sum = 0;
while(textfile.hasNextInt()) {
int nextInt = textfile.nextInt();
System.out.println(nextInt);
sum += nextInt;
}
}
答案 4 :(得分:1)
你必须做以下事情
while(i < 25)
{
System.out.println(aScanner.nextInt());
i++ ;
}
答案 5 :(得分:1)
它抛出一个异常,因为你没有在循环中增加i
。如果输入文件中的整数数量未知,您可以使用Scanner.hasNextInt()
方法检查下一个整数的存在(或者只使用hasNext()
检查EOF)。
您可以将下面的代码段中的数字相加:
...
int sum = 0;
while(i++ < 25)
{
sum += aScanner.nextInt();
}
或
...
int sum = 0;
while(aScanner.hasNextInt())
{
sum += aScanner.nextInt();
}
答案 6 :(得分:1)
您收到错误(例外),因为您的文件包含的数字非常大,不适合整数类型。您应该使用长。
因此,请使用:aScanner.nextLong()
代替aScanner.nextInt()
。
编辑:您还应该将sum
变量的类型从int
更改为long
。
您的代码可以正常使用。
答案 7 :(得分:0)
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);
}