读数据从文本文件,总结数字(Read Data From Text File And Sum Num

2019-06-26 21:12发布

我想从一个文本文件,里面充满整数读入数据,并有程序打印这些整数输出到屏幕,同时对它们求和。 这不应该是困难的,但我不能弄清楚!

这里是非常简单的文本文件:

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)

Answer 1:

你是在循环中调用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++;         
    }     
}


Answer 2:

你永远不增加i的,所以while循环继续超出文件的末尾。 至于总结,做这样的事情。

static void addstuff(Scanner aScanner) {
        int sum = 0;

        while (aScanner.hasNextInt()) {
            sum += aScanner.nextInt();
        }

        System.out.println(sum);
}

这将持续到hasNextInt()返回false,当扫描仪看到的下一个项目是不是整数发生。 这可能是非数字输入或文件的末尾。 这意味着你不再局限于25个整数 - 它会在停止之前尽量多看,因为它可以。



Answer 3:

因为你永远不增加i ,它永远不会从0变化,所以它总是小于25。这意味着它会尝试再次看它做了25元后,但没有26日,因此有一个例外。

代替的while循环,我会建议for循环。

总之他们,而不是打印出来,只需添加到累加器。

int accumulator = 0;
for(int i = 0; i < 25; i++)
    accumulator += aScanner.nextInt();

System.out.println(accumulator);

应打印出总和。



Answer 4:

除了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;
}

}



Answer 5:

你将不得不做以下的事情

    while(i < 25)
    {
        System.out.println(aScanner.nextInt());
        i++ ;
    }


Answer 6:

它抛出一个异常,因为你不会增加i的循环。 在情况下,如果整数的输入文件的数量是未知的,你可以使用Scanner.hasNextInt()方法来检查下一个整数的存在(或只是使用hasNext()检查EOF)。

你可以归纳像下面的代码片段的数字:

    ...
    int sum = 0;
    while(i++ < 25)
    {
        sum += aScanner.nextInt();
    }

要么

    ...
    int sum = 0;
    while(aScanner.hasNextInt())
    {
        sum += aScanner.nextInt();
    }


Answer 7:

你所得到的错误(异常),因为你的文件有不适合于整数类型非常大的数字。 你应该使用

因此,使用方法: aScanner.nextLong()代替aScanner.nextInt()

编辑:你也应该改变的类型sum变量从intlong

您的代码将正常工作。



Answer 8:

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



}


文章来源: Read Data From Text File And Sum Numbers