I\'m apparently facing an infinite loop on while(input.hasNext())
, as in following code
File file = new File(\"data.txt\");
Scanner input = new Sca
You do not need to double checking on content. this should work:
File file = new File("data.txt");
Scanner input = new Scanner(file);
int sum = 0;
while(input.hasNextInt()) {
sum += input.nextInt();
}
System.out.println(sum);
Hope this helps.
Seems like scanner is reading a non int value from your file and when it does , while(input.hasNext()) will always be true because there is something as an input to scanner but it is not int. So scanner skips reading this non-int value in the inner if(input.hasNextInt()) check.
So scanner does not proceed beyond this element and always return true.
If you want to sum up all the integers in your file then you should modify your code to below:
while(input.hasNext()) {
if(input.hasNextInt()) {
sum += input.nextInt();
}
else
input.next();
}
Just read the non integer elements when scanner encouters it. Hope this clarifies.
Well, according to
while(input.hasNext()) {
if(input.hasNextInt()) {
sum += input.nextInt();
}
}
Your scanner will not consume the next token if this token isn't an int
, you can hilight this behavior with something like
int k=0;
while(input.hasNext()) {
if(input.hasNextInt()) {
sum += input.nextInt();
} else {
System.err.println("What ? It's not an integer...");
if ( k < 1 ) {
System.err.println("I'm gonna try again !");
k++;
} else {
System.err.println("'"+input.next()+"' it's definitively not an integer");
k=0;
}
}
}
Finally, there are many solutions, for example :
Scanner::next()