Atualizar variável

2 respostas
G

Não consegui entender porque a variável ''somaCartaJogador' não está sendo atualizada no meu código

import p1.aplic.cartas.Baralho;
import p1.aplic.cartas.Carta;
import p1.aplic.cartas.Mao;
import java.util.Scanner;

public class SeteeMeioPreparacao {
public static void main(String[] args) {
	float somaCartaJogador = (float)0.0;
//	public float somaCartaCarteador =  0;
	Baralho monte = new Baralho();
	monte.baralhar();
	
	
	Mao maoJogador = new Mao();
//	Mao carteador = new Mao();
	IniciarJogo(monte, maoJogador, somaCartaJogador);
	System.out.println("parei");
	
}
private static void AdicionaCartaValida (Baralho baralho, Mao pessoa, float somaCartas){
	Carta[] cartasInvalidas = {new Carta(8,Carta.PAUS),new Carta(8,Carta.OUROS),new Carta(8,Carta.COPAS),new Carta(8,Carta.ESPADAS), new Carta(9,Carta.PAUS),new Carta(9,Carta.OUROS),new Carta(9,Carta.COPAS),new Carta(9,Carta.ESPADAS),new Carta(10,Carta.PAUS), new Carta(10,Carta.OUROS),new Carta(10,Carta.COPAS),new Carta(10,Carta.ESPADAS)};
	Carta possivelCarta = baralho.pegaCarta();
	int igual=0;
	for (int i = 0; i < cartasInvalidas.length; i++) {
		Carta umaCarta = cartasInvalidas[i];
		if ((possivelCarta.getValor() ==  umaCarta.getValor()) && (possivelCarta.getNaipe() ==  umaCarta.getNaipe())){
			AdicionaCartaValida(baralho,pessoa,somaCartas);
			igual = 1;
			break;
		}
	}
	if (igual==0){
		ContaCartas(pessoa, possivelCarta, somaCartas);
		pessoa.adicionar(possivelCarta);
	}
}
private static void IniciarJogo(Baralho baralho, Mao maoPessoa, float somaCartas){
	Scanner sc = new Scanner(System.in);
	String maisCarta;
	System.out.print("Mao do Jogador:  ");
	System.out.println(maoPessoa);
	do{
		AdicionaCartaValida(baralho, maoPessoa, somaCartas);
		System.out.print("Mao do Jogador:  ");
		System.out.println(maoPessoa);
		System.out.println("Soma carta jogador: " + somaCartas);
		System.out.print("Quer outra carta? (Digite t para encerrar)");
		maisCarta = sc.nextLine();
	}while(!maisCarta.equals("t"));
}
private static void ContaCartas(Mao maoPessoa, Carta carta, float somaCartas){
	if ( (carta.getValor()== 11)||(carta.getValor()== 12)||(carta.getValor()== 13)){
		somaCartas = somaCartas + (float)0.5;
	}else{
		somaCartas = somaCartas + carta.getValor();
	}System.out.println("getValor"+carta.getValor());
}
}

A atualização da variável deveria acontecer na linha 53 ou 55. Qualquer ajuda é bem vinda !
Obrigado

2 Respostas

rijava

Analisando novamente…

JoaoBluSCBR

Cara!

Tua dúvida está meio obscura.

Tua variavel somaCartaJogador é um flot criado dentro do método main

Ela não éum atributo de classe.

Se você quer que ela seja manipulada e alterada por outros métodos,
para começar, coloque ela fora do método

private float somaCartaJogador = 0.0;

Seguindo…

Ela tá dentro do main e é passada como parâmetro no método iniciarJogo

iniciarJogo transforma essa variavel em somaCartas

Mas lembre Java não passa variaveis por referencia e sim por valor.

Isso quer dizer que vc mudando essa variavel dentro do método iniciarJogo
essa alteracao não vai se refletir na somaCartaJogador.

Então se vc quer que essa variavel reflita as mudanças, coloque ela como
atributo de classe e não a passe mais como parametro, apenas usando
no teu código o nome original do atributo.

Abaixo reformulei teu código seguindo esse principio. Tive de mudar algumas
coisas, vc usou um monte de métodos static e isso torna impossível enxergar
o valor de alguns atributos.

Programe mais simples. Crie classes com atributos e métodos. Crie um construtor
e use o teu método main apenas para iniciar a classe e coloque toda a partida
do processo dentro do construtor. Isso mudo completamente a organizacao da
coisa. E com atributos (variaveis) de classe vc nao precisa passar tantos parametros.

Não pude testar por que na tenho as outras classes que vc criou.

Mas não prestei atenção no resto do código então sugiro que você teste e
veja se é isso que você quer:

import p1.aplic.cartas.Baralho;
import p1.aplic.cartas.Carta;
import p1.aplic.cartas.Mao;
import java.util.Scanner;

public class SeteeMeioPreparacao {
    
    //Atributos
    private float somaCartaJogador = (float) 0.0;
    private Baralho baralho = new Baralho();
    Mao maoJogador = new Mao();

    public static void main(String[] args) {
        SeteeMeioPreparacao sete = new SeteeMeioPreparacao();        
    }           
        
    public void SeteeMeioPreparacao(){
                
        baralho.baralhar();

        IniciarJogo();
        
        System.out.println("parei");

    }

    public void AdicionaCartaValida() {
        Carta[] cartasInvalidas = {new Carta(8, Carta.PAUS), new Carta(8, Carta.OUROS), new Carta(8, Carta.COPAS), new Carta(8, Carta.ESPADAS), new Carta(9, Carta.PAUS), new Carta(9, Carta.OUROS), new Carta(9, Carta.COPAS), new Carta(9, Carta.ESPADAS), new Carta(10, Carta.PAUS), new Carta(10, Carta.OUROS), new Carta(10, Carta.COPAS), new Carta(10, Carta.ESPADAS)};
        Carta possivelCarta = baralho.pegaCarta();
        int igual = 0;
        for (int i = 0; i < cartasInvalidas.length; i++) {
            Carta umaCarta = cartasInvalidas[i];
            if ((possivelCarta.getValor() == umaCarta.getValor()) && (possivelCarta.getNaipe() == umaCarta.getNaipe())) {
                AdicionaCartaValida();
                igual = 1;
                break;
            }
        }
        if (igual == 0) {
            ContaCartas(possivelCarta);
            maoJogador.adicionar(possivelCarta);
        }
    }

    public void IniciarJogo() {
        Scanner sc = new Scanner(System.in);
        String maisCarta;
        System.out.print("Mao do Jogador:  ");
        System.out.println(maoJogador);
        do {
            AdicionaCartaValida();
            System.out.print("Mao do Jogador:  ");
            System.out.println(maoJogador);
            System.out.println("Soma carta jogador: " + somaCartaJogador);
            System.out.print("Quer outra carta? (Digite t para encerrar)");
            maisCarta = sc.nextLine();
        } while (!maisCarta.equals("t"));
    }

    public void ContaCartas(Carta carta) {
        if ((carta.getValor() == 11) || (carta.getValor() == 12) || (carta.getValor() == 13)) {
            somaCartaJogador = somaCartaJogador + (float) 0.5;
        } else {
            somaCartaJogador = somaCartaJogador + carta.getValor();
        }
        System.out.println("getValor" + carta.getValor());
    }
}
Criado 18 de agosto de 2011
Ultima resposta 19 de ago. de 2011
Respostas 2
Participantes 3