продолжайте получать: исключение в потоке main java.util.NoSuchElementException

Привет, я все еще новичок в Java, и я пытаюсь сделать эту программу для расчета обменных курсов. Есть проблема, с которой я, кажется, не выхожу. Я продолжаю получать это сообщение: Исключение в потоке «основной» java.util.NoSuchElementException. Может ли кто-нибудь помочь мне. Я пытаюсь прочитать число и слово в текстовом файле.

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

public class Main {
  public static final double dollarNaarEuro = 1*0.74;
  public static final double yenNaarEuro = 1*0.071;
  public static final double pondNaarEuro = 1*1.21;
  public static final double oreNaarEuro = 1*0.11;

public static void main(String[] arg) throws IOException {

File f = new File("test.txt");
if (f.exists() && f.isFile()) {
Scanner sc = new Scanner(f);

sc.useDelimiter("\\s*  \\s*");
while (sc.hasNext()
) {
String s = sc.next();

String s1 = sc.next();
double geld = Double.parseDouble(s1);
s = s.replace("$", "Dollar");
s = s.replace("E", "Euro");
s = s.replace("Y", "Yen");
s = s.replace("B", "British Pound");
s = s.replace("O", "Ore");

  System.out.println("Deze bedragen staan in de file:"+s);
/*  int geld = 1;

        switch (geld) {
            case 1:  System.out.println("Dollar"); break;
            case 2:  System.out.println("Euro"); break;
            case 3:  System.out.println("Yen"); break;
            case 4:  System.out.println("British Pound"); break;
            case 5:  System.out.println("Ore"); break;

        }



}*/
sc.close();


}}
}
}

person user3215634    schedule 20.01.2014    source источник
comment
В какой строке вы получаете исключение?   -  person Elliott Frisch    schedule 20.01.2014


Ответы (4)


У вас есть один вызов sc.hasNext() и 2 последовательных вызова sc.next().

String s = sc.next();
String s1 = sc.next();

Второй вызов, очевидно, вызывает исключение, когда последний элемент был прочитан первым вызовом.

person AlexR    schedule 20.01.2014

Вы вызываете Scanner.next два раза подряд: один раз для установки переменной s и второй раз для установки переменной s1. Если нет другой строки для чтения, вы получите NoSuchElementException, как описано в JavaDoc для Scanner.next().

Не похоже, что вы используете вторую переменную, поэтому либо удалите ее, либо защитите с помощью Scanner.hasNext().

person Nick Holt    schedule 20.01.2014

Используйте это вместо этого:

String s = sc.next();
double geld = Double.parseDouble(s);
person stefana    schedule 20.01.2014

Спасибо, теперь работает первая часть. Теперь я могу продолжить работу с остальными.

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

public class Main {
 public static void main(String[] arg) throws IOException {
 File f = new File("test.txt");
 if (f.exists() && f.isFile()) {
 Scanner sc = new Scanner(f);
sc.useDelimiter("\\s* \\s*");
while (sc.hasNext()) {
 String s = sc.next();

     s = s.replace("$", "Dollar");
     s = s.replace("E", "Euro");
     s = s.replace("Y", "Yen");
     s = s.replace("B", "British Pound");
     s = s.replace("O", "Ore");


System.out.println(sc.next() +" "+ s);

}
sc.close();
}}
}
person user3215634    schedule 21.01.2014