在 do While 循环中出现 "Exception in thread "main" java.util.InputMismatchException" 错误
Getting an "Exception in thread "main" java.util.InputMismatchException" error inside a do While Loop
import java.util.Random;
import java.util.Scanner;
public class Jogo {
Scanner scanner = new Scanner(System.in);
int tipoJogo;
int turno;
Barco[] jfA,jfB;
Random random = new Random();
public Jogo(Barco[]fA, Barco[]fB, int tamanhomax, int tj)
{
for(int i =0;i<tamanhomax;i++)
{
fA[i]=fB[i]=null;
}
jfA = fA;
jfB = fB;
tipoJogo=tj;
}
//public Barco[] getFrota() {
// return frota;
//}
int linhaAC = random.nextInt(7);
int colunaAC = random.nextInt(7);
int orientação = random.nextInt(1);
public Jogo(int TipoJogo){
TipoJogo = tipoJogo;
}
public void manual1(){
System.out.println("Jogador A");
System.out.println("Insira as coordenadas do Aircraft Carrier e a sua orientação(0 horizontal, 1 vertical):");
//linhaAC = scanner.nextInt();
//colunaAC = scanner.nextInt();
String op= scanner.nextLine();
int linhaAC = (int) Character.toUpperCase(op.charAt(0))-'A'; //vai buscar o primeiro caracter da String op e transforma do A ao I em interiros 0 a 8
int colunaAC = (int) op.charAt(1)-'1';
int orientação = scanner.nextInt();
System.out.println(linhaAC +" - " + colunaAC);
do{
System.out.println("Fora do tabuleiro");
System.out.println("Insira de novo as coordenadas do Aircraft Carrier: ");
linhaAC= (int) Character.toUpperCase(op.charAt(0))-'A';
colunaAC = (int) op.charAt(1)-'1';
orientação = scanner.nextInt();
}while((colunaAC > 4 && orientação == 0)|| (linhaAC > 'D' && orientação == 1));
好的,我收到以下错误代码:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Jogo.manual1(Jogo.java:147)
at Main.start(Main.java:134)
at Main.main(Main.java:26)
当我尝试在 do while 循环中为变量 LinhaAC 和 ColunaAC 设置新值时会发生这种情况。
基本上,如果我将 LinhaAC 设置为大于 'D' 或将 ColunaAC 设置为大于 4,它会启动 Do while 循环,我要求用户向这些变量插入新值。
因此,当我尝试设置新值时,在插入 LinhaAC 和 ColunaAC 后按回车键,以便为 "orientação" 选择新值,这会触发错误。
它只发生在 do while 组中。在我第一次插入值时,它没有给出任何错误。
编辑:即使我使用我第一次选择的相同值也会发生这种情况。它不像我在 scanner.next() 上插入一个 int;
您的代码没有错误。原因是您得到 InputMismatchException
因为您的输入与变量类型不匹配。
您正在接受三个输入,它们的类型应该匹配。
这就是出现这些错误消息的原因:
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
例如:
orientação = scanner.nextInt();
这一行需要整数值,但如果你添加 String
它会给你 InputMismatchException
解决方案:
为避免这种情况,您可以处理输入类型,如果它不是整数,您可以通过 try-catch block
显示正确的消息。
try{
orientação = scanner.nextInt();
}catch(InputMismatchException e){
System.out.println("Enter only integer");
}
或者您可以像这样打印错误消息,
//...
catch(InputMismatchException e){
System.out.println(e);
}
同样对从键盘获得的每个输入执行此操作。这将避免错误消息并使您的程序更易于处理。
详细了解 exception handling。
终于修好了
public void manual1(){
System.out.println("Jogador A");
System.out.println("Insira as coordenadas do Aircraft Carrier e a sua
orientação(0 horizontal, 1 vertical):");
//linhaAC = scanner.nextInt();
//colunaAC = scanner.nextInt();
String op= scanner.next();
int linhaAC = (int) Character.toUpperCase(op.charAt(0))-'A';
int colunaAC = (int) op.charAt(1)-'1';
int orientação = scanner.nextInt();
System.out.println(linhaAC +" - " + colunaAC);
while((colunaAC >= 4 && orientação == 0) || (linhaAC >= 4 && orientação == 1)){
System.out.println("Fora do tabuleiro");
System.out.println("Insira de novo as coordenadas do Aircraft Carrier: ");
op= scanner.next();
linhaAC=(int)Character.toUpperCase(op.charAt(0))-'A';
colunaAC = (int) op.charAt(1)-'1';
orientação = scanner.nextInt();
System.out.println(linhaAC +" - " + colunaAC);
}
import java.util.Random;
import java.util.Scanner;
public class Jogo {
Scanner scanner = new Scanner(System.in);
int tipoJogo;
int turno;
Barco[] jfA,jfB;
Random random = new Random();
public Jogo(Barco[]fA, Barco[]fB, int tamanhomax, int tj)
{
for(int i =0;i<tamanhomax;i++)
{
fA[i]=fB[i]=null;
}
jfA = fA;
jfB = fB;
tipoJogo=tj;
}
//public Barco[] getFrota() {
// return frota;
//}
int linhaAC = random.nextInt(7);
int colunaAC = random.nextInt(7);
int orientação = random.nextInt(1);
public Jogo(int TipoJogo){
TipoJogo = tipoJogo;
}
public void manual1(){
System.out.println("Jogador A");
System.out.println("Insira as coordenadas do Aircraft Carrier e a sua orientação(0 horizontal, 1 vertical):");
//linhaAC = scanner.nextInt();
//colunaAC = scanner.nextInt();
String op= scanner.nextLine();
int linhaAC = (int) Character.toUpperCase(op.charAt(0))-'A'; //vai buscar o primeiro caracter da String op e transforma do A ao I em interiros 0 a 8
int colunaAC = (int) op.charAt(1)-'1';
int orientação = scanner.nextInt();
System.out.println(linhaAC +" - " + colunaAC);
do{
System.out.println("Fora do tabuleiro");
System.out.println("Insira de novo as coordenadas do Aircraft Carrier: ");
linhaAC= (int) Character.toUpperCase(op.charAt(0))-'A';
colunaAC = (int) op.charAt(1)-'1';
orientação = scanner.nextInt();
}while((colunaAC > 4 && orientação == 0)|| (linhaAC > 'D' && orientação == 1));
好的,我收到以下错误代码:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Jogo.manual1(Jogo.java:147)
at Main.start(Main.java:134)
at Main.main(Main.java:26)
当我尝试在 do while 循环中为变量 LinhaAC 和 ColunaAC 设置新值时会发生这种情况。
基本上,如果我将 LinhaAC 设置为大于 'D' 或将 ColunaAC 设置为大于 4,它会启动 Do while 循环,我要求用户向这些变量插入新值。
因此,当我尝试设置新值时,在插入 LinhaAC 和 ColunaAC 后按回车键,以便为 "orientação" 选择新值,这会触发错误。
它只发生在 do while 组中。在我第一次插入值时,它没有给出任何错误。
编辑:即使我使用我第一次选择的相同值也会发生这种情况。它不像我在 scanner.next() 上插入一个 int;
您的代码没有错误。原因是您得到 InputMismatchException
因为您的输入与变量类型不匹配。
您正在接受三个输入,它们的类型应该匹配。
这就是出现这些错误消息的原因:
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
例如:
orientação = scanner.nextInt();
这一行需要整数值,但如果你添加 String
它会给你 InputMismatchException
解决方案:
为避免这种情况,您可以处理输入类型,如果它不是整数,您可以通过 try-catch block
显示正确的消息。
try{
orientação = scanner.nextInt();
}catch(InputMismatchException e){
System.out.println("Enter only integer");
}
或者您可以像这样打印错误消息,
//...
catch(InputMismatchException e){
System.out.println(e);
}
同样对从键盘获得的每个输入执行此操作。这将避免错误消息并使您的程序更易于处理。
详细了解 exception handling。
终于修好了
public void manual1(){
System.out.println("Jogador A");
System.out.println("Insira as coordenadas do Aircraft Carrier e a sua
orientação(0 horizontal, 1 vertical):");
//linhaAC = scanner.nextInt();
//colunaAC = scanner.nextInt();
String op= scanner.next();
int linhaAC = (int) Character.toUpperCase(op.charAt(0))-'A';
int colunaAC = (int) op.charAt(1)-'1';
int orientação = scanner.nextInt();
System.out.println(linhaAC +" - " + colunaAC);
while((colunaAC >= 4 && orientação == 0) || (linhaAC >= 4 && orientação == 1)){
System.out.println("Fora do tabuleiro");
System.out.println("Insira de novo as coordenadas do Aircraft Carrier: ");
op= scanner.next();
linhaAC=(int)Character.toUpperCase(op.charAt(0))-'A';
colunaAC = (int) op.charAt(1)-'1';
orientação = scanner.nextInt();
System.out.println(linhaAC +" - " + colunaAC);
}