正在线程中获取异常";“主要”;java.util.InputMismatchException

正在线程中获取异常";“主要”;java.util.InputMismatchException,java,inputmismatchexception,Java,Inputmismatchexception,我尝试一个接一个地获取输入,然后尝试对它们执行操作。遵循我的代码 import java.util.Scanner; public class PlayerRoster { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); final int LENGTH = 5; final cha

我尝试一个接一个地获取输入,然后尝试对它们执行操作。遵循我的代码

   import java.util.Scanner;

    public class PlayerRoster {
       public static void main(String[] args) {
          Scanner scnr = new Scanner(System.in);
      
          final int LENGTH = 5;
          final char quit = 'q';
          char uin = 'z';
          int jersey = 0;
          int chng = 0;
      
          int[] number = new int[LENGTH];
          int[] rating = new int[LENGTH];
      
          for(int i = 0; i < LENGTH; i++){
             System.out.println("Enter player "+(i+1)+"'s jersey number:");
             number[i] = scnr.nextInt();
             System.out.println("Enter player "+(i+1)+"'s rating:\n");
             rating[i] = scnr.nextInt();
          }
          for(int i = 0; i < LENGTH; i++){
             if (i == 0)
                System.out.println("ROSTER");
      
                 System.out.println("Player " + (i + 1) + " -- Jersey number: " + (number[i]) + ", Rating: " + (rating[i]));
             if (i == 4)
                System.out.println("");
      
          }
          while (uin != quit){
         
             System.out.println("MENU");
             System.out.println("u - Update player rating");
             System.out.println("a - Output players above a rating");
             System.out.println("r - Replace player");
             System.out.println("o - Output roster");
             System.out.println("q - Quit\n");
       
             System.out.println("Choose an option:");
              uin = scnr.next().charAt(0);
      
             if (uin == 'o')
                for(int i = 0; i < LENGTH; i++){
                   if (i == 0)
                      System.out.println("ROSTER");
                      System.out.println("Player " + (i + 1) + " -- Jersey number: " + (number[i]) + ", Rating: " + (rating[i]));
                   if (i == 4)
                      System.out.println("");
                }
         
         
             if (uin == 'u')
                System.out.println("Enter a jersey number: ");
                   chng = scnr.nextInt();
         
          }  
       }
    }

问题是代码块

 if (uin == 'u')
        System.out.println("Enter a jersey number: ");
           chng = scnr.nextInt();
由于您只希望在用户输入为“u”时使用球衣号码,因此chng=scnr.nextInt();应该在if块内。 在您的情况下,即使用户以“q”的形式提供输入,它仍然期望用户提供更多的输入,在这种情况下,您可能只是在给您输入不匹配异常提供空白

要修复它,请将代码更新为

if (uin == 'u')
{
     System.out.println("Enter a jersey number: ");
     chng = scnr.nextInt();
}

因此,现在如果您将输入设为“q”,那么您的循环将停止执行预期的输出。

它发生在哪一行?这可能是因为您混淆了nextInt()和next()调用。nextInt()不使用enter@Stultuske刚刚添加了代码,忘记了。@Stultuske chng=scnr.nextInt();你是说,你添加了stacktrace(或其中的一部分)?你知道那不是代码,对吧?@Stultuske是的,我知道那不是代码。我之所以这么说,是因为我不得不沮丧地将其缩进为代码来发布该死的stacktrace。在将代码更改为此之后,我不再有错误。谢谢!我不知道我曾经需要用括号括起if语句。如果希望if块中包含多个语句,则需要在if语句中添加括号,否则它是可选的。@holdthemayo7您在
System.out.println(“Player”)的行中遇到了相同的问题
。它不会导致异常,它只会打印这一行。
if (uin == 'u')
{
     System.out.println("Enter a jersey number: ");
     chng = scnr.nextInt();
}