Что означает этот код ошибки?Исключение в потоке "main" java.util.InputMismatchException - PullRequest
0 голосов
/ 09 февраля 2019

Мой код Java не работает должным образом.Я продолжаю получать это сообщение об ошибке сразу после того, как пользователь просит ввести R или P. Что это значит?Как я могу это исправить?

Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at PhoneBill3.main(PhoneBill3.java:17)

import java.util.Scanner;
public class PhoneBill3
{
   public static void main (String [] args)
   {
      double acctNum;
      int svcType=0;
      int dtmin=0;
      int ntmin=0;
      int dtFree=50;
      int ntFree=100;
      int minUsed=0;
      Scanner scan= new Scanner (System.in);
      System.out.print ("Please enter your account number: ");
      acctNum=scan.nextDouble();
      System.out.println ("Service type (R/P): ");
      svcType = scan.nextInt ();
      System.out.print("You entered " +svcType);

      //using switch to decide what to do with user input
      switch (svcType)
      {
         case 'R': 
         //if case R is entered, this should prompt the user to enter          
total minutes used and determin the cost of the Regular bill
            System.out.println ("Total minutes used: ");
            minUsed=scan.nextInt ();
            if (minUsed<50){
               System.out.println ("Account number: " + acctNum);
               System.out.println ("Account type: Regular");
               System.out.println ("Total minutes: " + minUsed);
               System.out.println ("Amount due: $15.00");}
            else{
               System.out.println ("Account number: " + acctNum);
               System.out.println ("Account type: Regular");
               System.out.println ("Total minutes: " + minUsed);
               System.out.println ("Amount due: $"+ 15 + (minUsed-    
50)*.2);}
            break;
         case 'P':
         //if case P is entered, this should prompt the user to enter     
day time and night time minutes used
            System.out.println ("Number of daytime minutes used: ");
            dtmin=scan.nextInt ();
            double dtTtlDue=0.00;
            System.out.println ("Number of nighttime minutes used: ");
            ntmin=scan.nextInt ();
            double ntTtlDue=0.00;
            dtTtlDue= (dtmin-dtFree)*.2;
            ntTtlDue= ((ntmin-ntFree)*.1);
            System.out.println ("Account number: " + acctNum);
            System.out.println ("Account type: Premium");
            System.out.println ("Daytime Min: "+ dtmin);
            System.out.println ("Nighttime Minutes: " + ntmin);
            System.out.println ("Amount due: $" + 25.00+ dtTtlDue + 
ntTtlDue);
            break;
       default:
            System.out.println ("That is not a valid service type. 
Enter R for regular or P for premium.");
            break;

       }

    }
}

Мне нужно, чтобы конечный продукт напечатал номер счета, тип услуги и, в зависимости от типа услуги, количество использованных минут или дневные и ночные минуты.Затем, основываясь на ответах, выведите общий счет.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Вы просите пользователя ввести значение String (длиной 1) и пытаетесь присвоить его переменной int (svcType).Вам необходимо внести 2 изменения:

1) Измените тип переменной svcType на тип char:

char svcType = '?';

2) Извлеките только первый символ ввода из пользовательского ввода:

scan.next().charAt(0);

Вы также можете toUpperCase() ввести для ввода строчные буквы 'r' или s ':

scan.next().toUpperCase().charAt(0);
0 голосов
/ 09 февраля 2019

Это происходит потому, что вы читаете ваш R & P ввод как int. Вы должны прочитать его как String Пожалуйста, измените

System.out.println ("Service type (R/P): ");
svcType = scan.nextInt ();

на

System.out.println ("Service type (R/P): ");
svcType = scan.next ().charAt(0);
...