Exercicio utilizando Switch Case, Condição "if" e um laço de repetição:

Sou iniciante na faculdade de TI, em Java mais ainda. O Professor passou um desafio aos alunos da sala, resolver o seguinte exercicio usando estrutura condicional “if”, switch case e um laço de repetição.

1- Faça um programa que: pergunte a mesada de um adolescente.
Após isso pergunte se ele deseja comprar alguma coisa.
O adolescente pode comprar produtos até o dinheiro acabar ou pode comprar somente o necessário.

Esse exercicio pode parecer bobeira para muitos, mas para o meu nivel de aprendizado e dos demais alunos da minha sala, é algo que se exige tempo e pesquisas independentes. Por isso estou aqui pedindo uma idéia de como posso alcançar o resultado final e alguns conselhos em erros que estou cometendo.
Meu código é o seguinte:

import java.util.*;
public class Exercicio {
    
    public static void main (String args[]){
            float mesada;
            float compra;
            int resposta;
            String mensagem = "Digite um valor válido";
        
        Scanner entrada = new Scanner(System.in);
        
        
        System.out.println("Qual é o valor da sua mesada?");
        mesada = entrada.nextFloat();
        
        
        
        System.out.println("O que deseja fazer?");
        System.out.println("1 - COMPRAR, 2 - ESTOU SATISFEITO, 3 - APENAS OLHAR");
        resposta = entrada.nextInt();
        switch(resposta){
            case 1:
            System.out.println("Qual o valor da compra?");
            compra = entrada.nextFloat();
            mesada = mesada - compra;
            
            
            if(mesada < 0){
                    System.out.println("Você não tem mais dinheiro!");
                }
            if(compra > mesada){
                    System.out.println("Não possui dinheiro suficiente");
                    
                    }
            break;     
        
            case 2:
                compra = entrada.nextFloat();
                float totalparc = mesada - compra;
                System.out.println("Seu saldo é de:" + totalparc);
                break;
                
            
                
            case 3:
                System.out.println("Agradecedemos sua preferência.");
                break;
                
            
            default:
                System.out.println(mensagem);
                break;
                        
                
        
        
        }
            
    }
        
}

Desculpe qualquer coisa, é a minha primeira participação no GUJ. Obrigado

Uma solução seria usar um loop do tipo While. Por que você pode comprar Enquanto tive dinheiro.

e ai dudujava1, é o seguinte o seu codigo, vc precisa utiliza um laço de repetição, o que voce pode utilizar é um laço de repetição enquanto(while), vou explicar pra vc.

case 1: 
            while (mesada > 0){
            System.out.println("Qual o valor da compra?");  
            compra = entrada.nextFloat();  
            mesada = mesada - compra;  
              
            
            if(mesada < 0){  
                    System.out.println("Você não tem mais dinheiro!");  
                }  
            if(compra > mesada){  
                    System.out.println("Não possui dinheiro suficiente");  
                      
                    } 
            }
            break;    

ai o que vc pode fazer é o seguinte, uma condição para sair do laço de repetição para encerrar o programa

O adolescente pode comprar produtos até o dinheiro acabar ou pode comprar somente o necessário.

O que o line postou resolve Metade de seus problemas.
Pois ai faz a compra até acabar o dinheiro.
Acrescente um OR

Acrescente um E && para resolver isto

Algo do tipo.

[code] while (mesada > 0) && (vontadeDeComprar= 1){
System.out.println(“Qual o valor da compra?”);
compra = entrada.nextFloat();
mesada = mesada - compra;

        if(mesada < 0){    
                System.out.println("Você não tem mais dinheiro!");    
            }    
        if(compra > mesada){    
                System.out.println("Não possui dinheiro suficiente");    
                    
                }   
        }  
        vontadeDeComprar = entrada.nextInt();
        // Especifique entre 0 ou 1 a vontade de comprar.
        break;      

[/code]

Eu faria assim :


case 1 : 
		while (mesada>0) && (resposta==1) {
			System.out.println("Qual o valor da compra?");   
            compra = entrada.nextFloat();
			
			if ((mesada-compra)>=0) {
				mesada-=compra;
				
					if (mesada==0){
						System.out.println("Sua mesada Acabou");
					}else {
						System.out.println("Ainda deseja comprar algo?");
						System.out.println("1 - COMPRAR, 2 - ESTOU SATISFEITO");   
						resposta=entrada.nextInt();
					}
					
			}else {
				System.out.println("Não possui dinheiro suficiente!!!");
						System.out.println("Ainda deseja comprar algo?");
						System.out.println("1 - COMPRAR, 2 - ESTOU SATISFEITO");   
						resposta=entrada.nextInt();				 
			}
		
		}
break;

Fiquei muito feliz com a prontidão e a vontade de ajudar que tiveram. Vou dar uma analisada nas idéias que me deram. Na verdade o lance do while eu já havia tentado, pensei nessa alternativa do while(mesada>0){ mas vocês me clarearam legal em como transformar isso no código e inserir no algoritmo.
Valeu galera!!

Desculpa me intrometer, mais daria para fazer tb com DO WHILE:

do { //Bloco de comandos }while(condição);

http://pt.wikibooks.org/wiki/Java/do_while

Galapagos, utilizei um pouco da sua idéia e mais algumas dicas a cima, consegui melhorar meu código, mas quando compilado e entra na situação em que do adolescente já comprou algo e o programa pergunta novamente se ele deseja algo, quando respondo “1” no bloco else gostaria que ele voltasse para o começo da instrução, o inicio do caso, pois aqui ele desce pra instrução seguinte, como se fosse uma linguagem estruturada, que vai seguindo uma cascata.
Fazer uma espécie de laço for mas sem saber quantas vezes ele vai executar aquela instrução.

[quote=dudujava1]Galapagos, utilizei um pouco da sua idéia e mais algumas dicas a cima, consegui melhorar meu código, mas quando compilado e entra na situação em que do adolescente já comprou algo e o programa pergunta novamente se ele deseja algo, quando respondo “1” no bloco else gostaria que ele voltasse para o começo da instrução, o inicio do caso, pois aqui ele desce pra instrução seguinte, como se fosse uma linguagem estruturada, que vai seguindo uma cascata.
Fazer uma espécie de laço for mas sem saber quantas vezes ele vai executar aquela instrução.[/quote]

Tenta usar o :

do {
...
//comando switch
...
} while (mesada>0) && (resposta==1);