本篇文章给大家谈谈Java.Util.Scanner的NoSuchElementException,同时本文还将给你拓展1-解决javaScanner出现java.util.NoSuchElement
本篇文章给大家谈谈Java.Util.Scanner的NoSuchElementException,同时本文还将给你拓展1-解决java Scanner出现 java.util.NoSuchElementException、Cursor.hasNext引发java.util.NoSuchElementException、java – 在List中查找匹配时的NoSuchElementException、Java 使用Scanner时的NoSuchElementException异常等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- Java.Util.Scanner的NoSuchElementException
- 1-解决java Scanner出现 java.util.NoSuchElementException
- Cursor.hasNext引发java.util.NoSuchElementException
- java – 在List中查找匹配时的NoSuchElementException
- Java 使用Scanner时的NoSuchElementException异常
Java.Util.Scanner的NoSuchElementException
我是Java的新手,但是正在阅读《 Java:如何编程》(第9版)一书,并举了一个例子,在我的一生中,我无法弄清楚问题出在哪里。
这是教科书中源代码示例的(略)增强版本:
import java.util.Scanner;public class Addition { public static void main(String[] args) { // creates a scanner to obtain input from a command window Scanner input = new Scanner(System.in); int number1; // first number to add int number2; // second number to add int sum; // sum of 1 & 2 System.out.print("Enter First Integer: "); // prompt number1 = input.nextInt(); // reads first number inputted by user System.out.print("Enter Second Integer: "); // prompt 2 number2 = input.nextInt(); // reads second number from user sum = number1 + number2; // addition takes place, then stores the total of the two numbers in sum System.out.printf( "Sum is %d\n", sum ); // displays the sum on screen } // end method main} // end class Addition
我收到“NoSuchElementException
”错误:
Exception in thread "main" java.util.NoSuchElementExceptionat java.util.Scanner.throwFor(Scanner.java:838)at java.util.Scanner.next(Scanner.java:1461)at java.util.Scanner.nextInt(Scanner.java:2091)at java.util.Scanner.nextInt(Scanner.java:2050)at Addition.main(Addition.java:16)Enter First Integer:
我知道这可能是由于源代码中的某些内容与Scannerfrom
中的类不兼容所致java.util
,但是在推断出问题所在的方面,我确实无法获得更多的帮助。
答案1
小编典典NoSuchElementException
被nextElement
枚举方法抛出以指示枚举中没有更多元素。
http://docs.oracle.com/javase/7/docs/api/java/util/NoSuchElementException.html
这个怎么样 :
if(input.hasNextInt() ) number1 = input.nextInt(); // if there is another number else number1 = 0; // nothing added in the input
1-解决java Scanner出现 java.util.NoSuchElementException
起因:在函数中新建scanner对象,然后多次调用此方法出现上述异常
原因:Scanner(system.in)在Scanner中接受的是键盘 输入,当调用close()方法时
Scanner的关闭会导致System.in的关闭,System.in是标准输入(键盘输入),只能关一次,关闭后不能再打开。
解决办法1:在主函数的声明,然后作为参数传入方法中
解决办法2:
查看scanner源码
// Boolean indicating if this scanner has been closed
private boolean closed = false;
public void close() {
if (closed)
return;
if (source instanceof Closeable) {
try {
((Closeable)source).close();//将会关闭流
} catch (IOException ioe) {
lastException = ioe;
}
}
sourceClosed = true;
source = null;
closed = true;
}
直接在函数中用反射改变closed的值,实现永远不关闭
public void scanner() throws NoSuchFieldException, IllegalAccessException, InstantiationException {
Scanner my=new Scanner(System.in);
a=my.nextInt();
b=my.nextInt();
c=my.nextInt();
Class clazz =Scanner.class;
Field field = clazz.getDeclaredField("closed");
field.setAccessible(true);
field.set(my,true);
my.close();
}
当想要关闭的时候,再使用反射改变为false,调用scanner.close();
Cursor.hasNext引发java.util.NoSuchElementException
public String ForDate(String date) { MongoCursor<Document> cursor = collection.find(eq("date", date)).iterator(); basicb b = new basicb(); while (cursor.hasNext()) { b.setDepartament(cursor.next().getString("departament")); b.setText(cursor.next().getString("text")); b.setTitle(cursor.next().getString("title")); lista.add(b); }}
我只想从mongodb信息中处理对象,但是当我执行此方法时,要使一些对象成为对象,但总是返回该错误java.util.NoSuchElementException。
答案1
小编典典可能的问题是,您next
在一个循环中调用了3次方法。您应该调用一次并将其结果存储在变量中,因为它会next
检索迭代中的下一个元素
while (cursor.hasNext()) { Document element = cursor.next(); b.setDepartament(element.getString("departament")); b.setText(element.getString("text")); b.setTitle(element.getString("title")); lista.add(b);}
java – 在List中查找匹配时的NoSuchElementException
public boolean isMatched() { List<String> stringList = Arrays.asList("str1","str2","str3"); String matchString = "str1"; for (String str : stringList) { if (StringUtils.equals(str,matchString)) { return true; } } return false; }
现在,我想做同样的事情,但改用Java 8.到目前为止我有这个:
public boolean isMatched() { List<String> stringList = Arrays.asList("str1","str3"); String matchString = "str1"; return (stringList.stream().filter(str -> StringUtils.equals(matchString,str)).findFirst().get() != null); }
使用第二种方法,我收到以下错误:
java.util.NoSuchElementException: No value present [junit] at java.util.Optional.get(Optional.java:135)
为什么我会收到此错误,我应该怎么做才能解决?
解决方法
看起来你想要.findFirst().isPresent(),或者如下所述,anyMatch(谓词).
Java 使用Scanner时的NoSuchElementException异常
做实验时设计了一个类,在类中的两个不同函数中分别创建了两个Scanner对象,并且在各个函数的结尾使用了close()方法,结果在运行时产生了NoSuchElementException异常。
实验的中的类和下方代码差不多,记录一下异常的原因。
1 package Test; 2 3 import java.util.Scanner; 4 5 public class Main { 6 7 public static void main(String[] args) { 8 Info info = new Info(); //实例化Info对象,调用两个方法 9 info.test1(); 10 info.test2(); 11 } 12 13 } 14 15 class Info{ 16 17 public void test1(){ 18 Scanner scan = new Scanner(system.in); //创建第一个Scanner对象 19 String info = scan.next(); 20 System.out.println(info); 21 scan.close(); //在结尾使用close()关闭Scanner 22 } 23 24 public void test2(){ 25 Scanner scan2 = new Scanner(system.in); //第二个Scanner对象 26 String info = scan2.next(); 27 System.out.println(info); 28 scan2.close(); 29 } 30 }
运行结果:
12
12
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
at Test.Info.test2(Main.java:26)
at Test.Main.main(Main.java:10)
Process finished with exit code 1
===============================================================
在网上查找资料后发现,system.in在源码中是这样定义的:
public final static InputStream in = null;
system.in是静态的,当前类中所有System对象共享,在使用close()方法时,会同时关闭Scanner和system.in,而system.in关闭后不能再打开,当第二个函数再次想实例化Scanner时就会抛出NoSuchElementException异常。
解决方法是在主方法中调用方法时在参数中传入Scanner对象,或者在类中最后关闭Scanner。
关于Java.Util.Scanner的NoSuchElementException的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于1-解决java Scanner出现 java.util.NoSuchElementException、Cursor.hasNext引发java.util.NoSuchElementException、java – 在List中查找匹配时的NoSuchElementException、Java 使用Scanner时的NoSuchElementException异常的相关信息,请在本站寻找。
本文标签: