从文本文件和和数读取数据

时间:2012-08-09 01:11:31

标签: java input io text-files

我想从一个充满整数的文本文件中读取数据,并让程序在将它们相加的同时将这些整数打印到屏幕上。这应该不难,但我无法弄清楚!!!

这是极简化的文本文件:

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)

8 个答案:

答案 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);



}