2017-05-31 108 views
0
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)); 

好IAM收到以下错误代码:获得主“java.util.InputMismatchException‘错误的’,在线程异常”一做里面While循环

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) 

这发生时,我尝试设置变量LinhaAC和ColunaAC在do while循环中的新值。

基本上,如果我设置LinhaAC大于'D'或ColunaAC大于4,它会启动Do while循环,我要求用户向这些变量插入新值。

因此,当我尝试设置新的值后,我插入LinhaAC和ColunaAC我按下输入,所以我可以选择新的值为“orientação”它会触发错误。

它只发生在组内的do内部。在我第一次插入的值不会给出任何错误。

编辑:即使我使用我第一次选择相同的值,它也会发生。它不像iam在scanner.next()上插入一个int。

+0

Barco是什么类型? – Blasanka

回答

0

最后我修复它。

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); 


    } 
0

代码中没有错误。原因是你得到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

相关问题