在我的代码线程“主”java.util.NoSuchElementException异常?

问题描述:

我做错了什么?在我的代码线程“主”java.util.NoSuchElementException异常?

的错误是:

异常在线程 “主” java.util.NoSuchElementException
在java.util.Scanner.throwFor(Scanner.java:862)
在java.util.Scanner中的.next(Scanner.java:1485)
在java.util.Scanner.nextInt(Scanner.java:2117)
在java.util.Scanner.nextInt(Scanner.java:2076)
在MyClass.main( MyClass.java:14)

下面是代码:

import java.util.Scanner; 
import java.util.Random; 
public class MyClass { 
public static Scanner scan = new Scanner(System.in); 
public static void main(String args[]) { 
    int person,ai,aiint; 
    Scanner scan = new Scanner(System.in); 
    Random rand = new Random(); 

    System.out.println("Let's Play rock paper scissors! press 1 for rock 2 for paper 3 for scissors "); 
    System.out.println(); 
    aiint=rand.nextInt(3)+1; 
    System.out.println("Enter your play: "); 
    person=scan.nextInt(); 
    System.out.println("Computer play is: " +aiint); 
    System.out.println("Your play is:" +person); 
    if (person==aiint) { 
     System.out.println("It's a tie!"); 
    } 
    else if (person==1){ 
      if(aiint==2){ 
       System.out.println("Paper beats rock, you lose!"); 
      } 
      else if(aiint==3){ 
       System.out.println("Rock beats scissors, you win!"); 
      } 
     } 
    else if (person==2){ 
      if(aiint==1){ 
       System.out.println("Paper beats rock, you win!"); 
      } 
      else if (aiint==3){ 
       System.out.println("Scissors beats paper, you lose!"); 
      } 
     } 
    else if (person==3){ 
     if(aiint==1){ 
      System.out.println("Rock beats scissors, you lose!"); 
     } 
     else if(aiint==2){ 
      System.out.println("Scissors beats paper. you win!"); 
     } 
    }  
    } 
} 
+3

任何原因'实例化'新的扫描仪(System.in)'两次? –

+0

我自己试了一下代码。基本上工作正常。 – Duke

你的代码是工作的罚款。

但是既然你提到NoSuchElementException,当您尝试读的东西形成Scanner它抛出,但Scanner没有什么被读取。

Scanner#nextInt()

文档@throws NoSuchElementException异常,如果输入信息已耗尽

为了防止这种情况,你应该检查在Scanner是否存在任何元素:

if(scan.hasNextInt()){ 
    person = scan.nextInt(); 
} else { 
    //show error 
    return; 
}