我的程序没有读取txt文件中的第二行

时间:2014-03-05 17:43:20

标签: java

我需要提示用户输入txt文件名,然后读取文件内的内容。我的程序似乎工作正常唯一的事情是它只读取了我的txt的第一行.....

这些是我的2行

  

38 4 19 -27 -15 -3 4 19 38

     

14 7 -10 9 -18 -10 17 42 98

我是否必须添加另一台扫描仪才能读取第二行?有人可以帮帮我吗 !

import java.io.*;
import java.util.*;

public class NegativeSum{
    public static void main (String [] args )
    throws FileNotFoundException{

Scanner console = new Scanner ( System.in);
System.out.println("enter  a name of a file " );
String name = console.nextLine();
Scanner input = new Scanner ( new File (name));



        negativesum(input);


        }//end of amin

public static boolean negativesum(Scanner input)
throws FileNotFoundException{

    int sum=0;
    int count = 0;

    while ( input.hasNextInt()){
        int next =input.nextInt();
        sum+=next;
        count++;

        if ( sum<0){
            System.out.println("sum of " + sum + " after " + count + "steps" );
            return true;
            }

        }///end of while
    System.out.println("no negative sum ");
    return false;




    }//end of metho d

}//end of main

8 个答案:

答案 0 :(得分:1)

您不需要第二个Scanner。我建议你阅读文件
逐行,并解析每一行,例如使用String.split

答案 1 :(得分:0)

当前代码读取文件的第二行。

如果总和小于 0 ,则行System.out.println("sum of " + sum + " after " + count + "steps" );将被打印当前数字的总和不小于0只需添加一个数字,使得总和小于0和预期输出将被打印

答案 2 :(得分:0)

像这样设置你的程序

while(input.hasNext()) {
    if(input.hasNextInt())
        // Do your thing
    else
        input.next(); // Discard non-integer tokens
}

http://www.tutorialspoint.com/java/util/scanner_hasnextint.htm

答案 3 :(得分:0)

我建议您在

之后添加一个简单的打印声明
  int next = input.nextInt();

像:

  System.out.println(next+"\t"+sum);

当我测试你的代码时,它打印出来了:

38  0
4   38
19  42
-27 61
-15 34
-3  19
4   16
19  20
38  39
14  77
7   91
-10 98
9   88
-18 97
-10 79
17  69
42  86
98  128
no negative sum 

所以我认为你的代码没有任何问题。

答案 4 :(得分:0)

我带了你的代码,它按原样运行。在给定输入的18个步骤后得到226的总和。 只需将System.out.println语句放在if条件之外,看看你得到了什么。

答案 5 :(得分:0)

public static boolean negativesum(Scanner input)
        throws FileNotFoundException {

    int sum = 0;
    int count = 0;

    while (input.hasNext()) {
        if (input.hasNextInt()) {
            sum += input.nextInt();
            ++count;
        } else
            input.next();
    } // /end of while

    System.out.println("Numbers parsed: " + count + "\nTotal Sum: " + sum);
    return sum < 0;

} // end of method

答案 6 :(得分:0)

目前,您的代码无法将换行符视为特殊内容;这意味着您的输入被视为一条长行。从这个意义上讲,它“有效”,但你的问题暗示这不是你想要的。

我猜你想要分别对待每一行,并让程序在每一行的末尾“重置”。

您可以实现的一种方法是使用一台扫描仪逐行读取文件,然后对于每一行,使用第二台扫描仪读取该行的内容。所以它可能看起来像这样。

Scanner input = new Scanne(new File (name));
while (input.hasNextLine()) {
    String line = input.nextLine();
    negativesum(new Scanner(line));
}

然后,您可以完全按照目前的方式保留negativesum方法。

答案 7 :(得分:-3)

返回true; 会导致您的“if”循环在第一个值小于零时返回,因此它只读取第一行。