我的代码上的线程“main”java.util.NoSuchElementException 中的异常?

Posted

技术标签:

【中文标题】我的代码上的线程“main”java.util.NoSuchElementException 中的异常?【英文标题】:Exception in thread "main" java.util.NoSuchElementException on my code? 【发布时间】:2018-03-19 20:46:01 【问题描述】:

我做错了什么??

错误是:

线程“main”中的异常 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!");
        
        
    

【问题讨论】:

有什么理由要实例化new Scanner(System.in) 两次? 自己试了下代码。实际工作正常。 【参考方案1】:

您的代码运行良好。

但是由于您提到了NoSuchElementException,当您尝试从Scanner 读取某些内容但Scanner 没有要读取的内容时,它会被抛出。

来自Scanner#nextInt()的文档

@throws NoSuchElementException 如果输入用尽

为了防止它,你应该检查Scanner中是否存在任何元素:

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

【讨论】:

以上是关于我的代码上的线程“main”java.util.NoSuchElementException 中的异常?的主要内容,如果未能解决你的问题,请参考以下文章

打印菜单。异常 java.util.NoSuchElementException 找不到行

Xcode 线程 1 SIGABRT 上的 Firebase 通知错误

CentOS 上的“信号”功能:意外行为

多线程,代码示例

线程“main”java.sql.SQLException中的异常:未选择数据库[重复]

线程“main”中的 Java 异常 java.lang.StringIndexOutOfBoundsException 错误