继续获取:线程“main”java.util.NoSuchElementException中的异常

时间:2014-01-20 15:26:11

标签: java switch-statement

嗨,我还是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();


}}
}
}

4 个答案:

答案 0 :(得分:2)

您有一次sc.hasNext()来电和sc.next()的两次连续来电。

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

第二次调用显然会在第一次调用读取最后一个元素时导致异常。

答案 1 :(得分:0)

您快速连续两次致电Scanner.next - 一次设置变量s,另一次设置变量s1。如果没有其他字符串可供阅读,您将获得NoSuchElementException,如Scanner.next()的JavaDoc中所述。

看起来您不会使用第二个变量,因此请将其删除或使用Scanner.hasNext()保护它。

答案 2 :(得分:0)

请改用:

String s = sc.next();
double geld = Double.parseDouble(s);

答案 3 :(得分:0)

谢谢它现在适用于第一部分。现在我可以继续其余的了。

    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();
}}
}