我需要提示用户输入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
答案 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”循环在第一个值小于零时返回,因此它只读取第一行。