Ola, bem fiz algumas classes de um baralho/carta e fiz um jogo de vinte um colocado em um livro de java, bem tudo compilou direitinho mas ao tentar rodar o programa essa msg aparece na tela:
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException
at Baralho.proximaCarta(Baralho.java:20)
at Vinteum.main(Vinteum.java:13)
Valew!
// Baralho.java
public class Baralho{
private Carta monte[];
private int topo;
public Baralho(){
monte=new Carta[52];
topo=0;
for(int n=1;n<5;n++)
for(int v=1;v<14;v++){
monte[topo++]=new Carta(n,v);
}
}
public boolean temCarta(){
return topo>0;
}
public Carta proximaCarta(){
Carta tmp=null;
if(topo>0){
tmp=monte[-topo];
}
return tmp;
}
public void embaralhar(){
for(int c=0;c<52;c++){
int i=(int)Math.round(Math.random()*51);
Carta tmp=monte[i];
monte[i]=monte[c];
monte[c]=tmp;
}
}
}
// Vinteum.java
public class Vinteum{
public static void main(String args[]){
int jogador=0,pontosJogador=0, //Definicao das variaveis do jogador e do croupier
comput=0, pontosComput=0;
Carta cartasJogador[]=new Carta[19],
cartasComput[]= new Carta[19];
Baralho b=new Baralho();
b.embaralhar();
String resp="N";
do{
cartasJogador[jogador++]=b.proximaCarta();
System.out.println("
Suas cartas:");
mostraCartas(cartasJogador);
pontosJogador=somaCartas(cartasJogador);
if(pontosJogador<21){
System.out.println("Quer carta? (S|N)");
resp=Input.readString();
}
}while(resp.equals("S")&&pontosJogador<21);
if(pontosJogador>21){
System.out.println("Voce perdeu!!");
return;
}
System.out.println("
Minhas cartas:");
while(pontosComput<pontosJogador&&pontosComput!=21){
cartasComput[comput++]=b.proximaCarta();
pontosComput=somaCartas(cartasComput);
}
mostraCartas(cartasComput);
if(pontosComput>=pontosJogador&&pontosComput<=21){
System.out.println("
Voce perdeu!");
} else{
System.out.println("
Voce ganhou!!");
}