2017-05-31 5 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)); 

Ok iam obtenir le code d'erreur suivant:Obtenir une "Exception dans le thread "erreur principale" de java.util.InputMismatchException" à l'intérieur d'une boucle Do 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) 

Cela arrive lorsque je tente de définir un nouvelle valeur pour les variables LinhaAC et ColunaAC dans la boucle do while. Fondamentalement, si j'ai défini LinhaAC pour être supérieur à 'D' ou ColunaAC pour être supérieur à 4, il démarre la boucle Do while où je demande à l'utilisateur d'insérer de nouvelles valeurs à ces variables.

Donc, quand j'essaie de définir de nouvelles valeurs, après avoir inséré LinhaAC et ColunaAC je presse entrer afin que je puisse choisir la nouvelle valeur pour "orientação" il déclenche l'erreur.

Cela se produit uniquement dans le groupe do while. Dans la première fois que j'insère les valeurs, cela ne donne aucune erreur.

EDIT: Cela arrive même si j'utilise la même valeur que celle que j'ai choisie la première fois. Ce n'est pas comme si j'insérais un int sur un scanner.next();

+0

quel est le type de 'Barco' – Blasanka

Répondre

0

Enfin, je le répare.

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

Il n'y a pas d'erreur dans votre code. La raison en est que vous obtenez InputMismatchException parce que votre entrée ne correspond pas au type de variable.

Vous prenez trois entrées dont les types doivent correspondre.

C'est la raison de ces messages d'erreur:

at java.util.Scanner.next(Scanner.java:1485) 
at java.util.Scanner.nextInt(Scanner.java:2117) 
at java.util.Scanner.nextInt(Scanner.java:2076) 

Comme exemple:

orientação = scanner.nextInt(); 

Cette ligne attendre valeur entière mais si vous ajoutez String à elle vous donne InputMismatchException

Solution :

Pour éviter cela, vous peut gérer le type d'entrée s'il n'est pas entier, vous pouvez afficher le message approprié par try-catch block.

try{ 
    orientação = scanner.nextInt(); 
}catch(InputMismatchException e){ 
    System.out.println("Enter only integer"); 
} 

Ou vous pouvez imprimer le message d'erreur comme,

//... 
catch(InputMismatchException e){ 
    System.out.println(e); 
} 

faire de même cette opération pour chaque entrée que vous obtenez à partir du clavier. Cela évitera les messages d'erreur et rendra votre programme plus facile à gérer.

En savoir plus sur exception handling.