продължавайте да получавате: Изключение в основната нишка java.util.NoSuchElementException

Здравейте, все още съм нов в java и се опитвам да направя тази програма за изчисляване на обменните курсове. Има проблем, с който изглежда не мога да се измъкна. Продължавам да получавам това съобщение: Изключение в нишката "main" 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