Что означает этот код ошибки? Исключение в потоке "main" java.util.InputMismatchException
Мой код 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 ответа
Это происходит потому, что вы читаете 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);
Вы просите пользователя ввести значение String (длиной 1) и пытаетесь присвоить его переменной int (svcType). Вам нужно сделать 2 изменения:
1) Измените тип переменной svcType на тип char:
char svcType = '?';
2) Извлечь только первый символ ввода из пользовательского ввода:
scan.next().charAt(0);
Вы могли бы также toUpperCase()
ввод для учета нижнего регистра 'r' или s':
scan.next().toUpperCase().charAt(0);