[RESOLVIDO] Problemas em repetir parte do codigo com a estrutura while!

[b]Boa tarde pessoal !!!
Esse e meu primeiro post no GUJ, espero que eu esteja postando tudo certinho ! Caso nao, pode me chingar.
uahuahahhaauahauhauhau :stuck_out_tongue:

Bom, minha duvida e o seguinte, estou começando a costruir codigos com o conceito a orientaçao a objeto !
Nessa ultima terça-feira, meu professor passou o seguinte exercicio.

(tomei a liberdade de postar ele desculpem ) :oops: [/b]

[i]Crie a classe Liquidificador de acordo com as definições abaixo:

  1. Atributos privados:
     velocidade – int
     velocidadeMaxima – int
     estado - char

  2. Métodos públicos:
    a) setVelocidade(int v) - atualizar o atributo velocidade.
    b) setVelocidadeMaxima(int vm) - atualizar o atributo velocidadeMaxima.
    c) desligar() – atribuir D ao atributo estado. Atribuir zero ao atributo velocidade.
    d) ligar() - atribuir L ao atributo estado. Atribuir 1 ao atributo velocidade.
    e) getEstado() – retornar o estado atual.
    f) getVelocidade() – retornar a velocidade atual.
    g) getVelocidadeMaxima() – retornar a velocidade máxima.

Crie a classe UsaLiquidificador com as definições abaixo:

  1. Utilize Keyboard ou Scanner para entrada de dados.

  2. Instancie a classe Liquidificador, em seguida, inicialize o objeto através dos métodos públicos implementados, deixando o com estado igual a D, velocidade máxima igual a 5 e velocidade atual igual a zero.

  3. Implemente um menu com as opções:
    1 – ligar
    2 – desligar
    3 – mostrar estado
    4 – trocar velocidade
    5 – atribuir velocidade máxima
    9 – fim

Opção 1, ligue apenas se estiver desligado, mostre mensagem de erro.
Opção 2, desligue apenas se estiver ligado, mostre mensagem de erro.
Opção 3, mostrar velocidade atual, velocidade máxima e estado: Ligado ou Desligado.
Opção 4, aceite a nova velocidade, mostre mensagem de erro quando a nova velocidade é negativo, zero, maior que a velocidade máxima ou está desligado. Se a nova velocidade é válida, proceda a troca através do método.
Opção 5, aceite a nova velocidade máxima, mostre mensagem de erro quando a nova velocidade é negativo, zero ou é menor que a velocidade atual. Se a nova velocidade máxima é válida, proceda a troca através do método.
[/i]

Bom, escrevi 2 classes, uma delas com os atributos e metodos, que espero que eu nao precise postar ! (caso eu precise so pedir que eu postarei :smiley: ).
E a executavel que esta praticamente pronta, espero eu.
haauauaahauhauahuahahauhahahauhahauhau

Bom, a classe esta ai em baixo

[code]import java.util.Scanner;
public class Usaliquidificador {

public static void main (String args []) {
	
	Scanner input = new Scanner(System.in);
	Liquidificador liq = new Liquidificador();
	
	liq.setdesligar();
	liq.setvelocidademaxima(5);
	liq.setvelocidade(0);
	
	System.out.println(" Selecione um opçao: ");
	System.out.println(" =================== ");
	System.out.println(" 1-Ligar ");
	System.out.println(" 2-Desligar ");
	System.out.println(" 3-Mostra Estado ");
	System.out.println(" 4-Trocar Velocidade ");
	System.out.println(" 5-Atribuir Velocidade Maxima ");
	System.out.println(" 6-Fim ");
	
	int escolha = input.nextInt();input.nextLine();
	
	switch(escolha){
		
		case 1:
			
			if (liq.getestado() == 'd'){
				liq.setligar();
				System.out.println(" Liquidificador acaba de entrar em funcionamento ");
			}else{
				System.out.println(" ERRO: Liquidificador ja em funcionamento ");
			}
			break;
			
		case 2:
			
			if (liq.getestado() == 'L'){
				liq.setdesligar();
				System.out.println(" Liquidificador acaba de ser desligado ");
			}else{
				System.out.println(" Erro: Liquidificador ja esta desligado ");
			}
			break;
			
		case 3:
			
			System.out.println(" A velocidade atual do liquidificador é: " + liq.getvelocidade());
			System.out.println("");
			System.out.println(" A velocidade maxima do liquidificador é: " + liq.getvelocidademaxima());
			System.out.println("");
			System.out.println(" O estado atual do liquidificador é: " + liq.getestado());
			
			break;
			
		case 4:
			
			System.out.println(" Por favor informe uma velocidade positiva maior que zero e no maximo " + liq.getvelocidademaxima());
			
			 int vel = input.nextInt();input.nextLine();
			 liq.setvelocidade(vel);
			 
			 if (liq.getvelocidade() <= 0  ){
			 	System.out.println(" ERRO: Informe um numero positivo maior que 0 ");
			 }else if (liq.getvelocidade() > liq.getvelocidademaxima() ){
			 	System.out.println(" Erro: informe uma velocidade menor do que 5 ");
			 }else
			 	System.out.println(" Liquidificador operando com a nova velocidade: " + liq.getvelocidade());
			
			break; 	    			
	
		case 5:
			
			System.out.println(" Digite uma nova velocidade maxima ! ");
			System.out.println("");
			System.out.println(" Que seja maior que zero e positivo. ");
			
			int velm = input.nextInt();input.nextLine();
			liq.setvelocidademaxima(velm);
			
			if(liq.getvelocidademaxima() <= 0){
				System.out.println(" ERRO: Informe um numero positivo maior que 0 ");
			}else if (liq.getvelocidademaxima() < liq.getvelocidade()){
				System.out.println(" ERRO: Informe uma velocidade maior que a atual que esta em: " + liq.getvelocidade());
			}else
				System.out.println(" Nova velocidade maxima atribuida no liquidificador no valor de: " + liq.getvelocidademaxima());
			
			break;				 	
		
		case 9:
			
			System.out.println (" Obrigado ");
			
			break;
				 	
		}
					
	} 
	
	
}
[/code]

[b]Bem, finalmente minha duvida e o seguinte.
estou com problemas para fazer com que certas partes do codigo se repitam !

EXEMPLO: Se eu digito o 4-trocar velocidade, e atribuo 3 o codigo se encerra, e nao volta no inicio para realizar novas opçoes !
Imagino eu que eu posso adicionar a estrutura While no codigo, mas nao consigo fazer de jeito nenhum. :x
ja fiz algumas pesquisas, mas ainda assim minha cabeça continua "travada ".

Bom acho que fui claro ! Qualquer coisa peço desculpas.

Muito Obrigado !

Abraçoss

[/b]

Não testei, mas é ± isso

[code]import java.util.Scanner;
public class Usaliquidificador {

public static void main (String args []) {  
      
     int sair;
    Scanner input = new Scanner(System.in);  
    Liquidificador liq = new Liquidificador();  
      
    liq.setdesligar();  
    liq.setvelocidademaxima(5);  
    liq.setvelocidade(0);  
      do{
    System.out.println(" Selecione um opçao: ");  
    System.out.println(" =================== ");  
    System.out.println(" 1-Ligar ");  
    System.out.println(" 2-Desligar ");  
    System.out.println(" 3-Mostra Estado ");  
    System.out.println(" 4-Trocar Velocidade ");  
    System.out.println(" 5-Atribuir Velocidade Maxima ");  
    System.out.println(" 6-Fim ");  
      
    int escolha = input.nextInt();input.nextLine();  
      
    switch(escolha){  
          
        case 1:  
              
            if (liq.getestado() == 'd'){  
                liq.setligar();  
                System.out.println(" Liquidificador acaba de entrar em funcionamento ");  
            }else{  
                System.out.println(" ERRO: Liquidificador ja em funcionamento ");  
            }  
            break;  
              
        case 2:  
              
            if (liq.getestado() == 'L'){  
                liq.setdesligar();  
                System.out.println(" Liquidificador acaba de ser desligado ");  
            }else{  
                System.out.println(" Erro: Liquidificador ja esta desligado ");  
            }  
            break;  
              
        case 3:  
              
            System.out.println(" A velocidade atual do liquidificador é: " + liq.getvelocidade());  
            System.out.println("");  
            System.out.println(" A velocidade maxima do liquidificador é: " + liq.getvelocidademaxima());  
            System.out.println("");  
            System.out.println(" O estado atual do liquidificador é: " + liq.getestado());  
              
            break;  
              
        case 4:  
              
            System.out.println(" Por favor informe uma velocidade positiva maior que zero e no maximo " + liq.getvelocidademaxima());  
              
             int vel = input.nextInt();input.nextLine();  
             liq.setvelocidade(vel);  
               
             if (liq.getvelocidade() <= 0  ){  
                System.out.println(" ERRO: Informe um numero positivo maior que 0 ");  
             }else if (liq.getvelocidade() > liq.getvelocidademaxima() ){  
                System.out.println(" Erro: informe uma velocidade menor do que 5 ");  
             }else  
                System.out.println(" Liquidificador operando com a nova velocidade: " + liq.getvelocidade());  
              
            break;                    
      
        case 5:  
              
            System.out.println(" Digite uma nova velocidade maxima ! ");  
            System.out.println("");  
            System.out.println(" Que seja maior que zero e positivo. ");  
              
            int velm = input.nextInt();input.nextLine();  
            liq.setvelocidademaxima(velm);  
              
            if(liq.getvelocidademaxima() <= 0){  
                System.out.println(" ERRO: Informe um numero positivo maior que 0 ");  
            }else if (liq.getvelocidademaxima() < liq.getvelocidade()){  
                System.out.println(" ERRO: Informe uma velocidade maior que a atual que esta em: " + liq.getvelocidade());  
            }else  
                System.out.println(" Nova velocidade maxima atribuida no liquidificador no valor de: " + liq.getvelocidademaxima());  
              
            break;                    
          
        case 9:  
              
            System.out.println (" Obrigado ");  
              
            break;  
                      
        }  
       System.out.println("Deseja sair? 1 -sim");
       sair = input.nextInt();
     }while(sair!=1);
                      
    }   
      
      
}  
  [/code]

Legal Edipo, até que rolo !
mas, ainda nao e dessa forma
queria fazer com o while logo no começo do codigo !
ai caso eu digite o 9 ele saia do progarama.

E tbm fazer mais ou menos a mesma proposta pra os blocos de comando do caso 5 e 4 !

muito obrigado pela ajuda( mais ainda estou perdido )
auhuahuahuhauhuahahuh

abrassss

Ah quando tu digitar o 9 ele saia?

po, agora entendi (eu acho né eOISAHESA).

faz assim :

[code] case 9:

            System.out.println (" Obrigado ");    
            System.exit(0);  
            break;

[/code]

Cara, nos trancos e barrancos aqui !

nao entendi esse metodo.

System.exit(0);

[quote=manolo]Cara, nos trancos e barrancos aqui !

nao entendi esse metodo.

System.exit(0);

Oi,

Este comando faz com que seu programa seja fechado por completo, inclusive liberando a memoria utilizado pelo SO.
Quase o mesmo procedimento feito pelo dispose();

Tchauzin!

[b]Ahhhh, sim Lina !

Obrigado :stuck_out_tongue:

Mas e o seguinte so falta esse raio de loop !

fiz a seguinte modificaçao no codigo.
[/b]

[code]Scanner input = new Scanner(System.in);
	Liquidificador liq = new Liquidificador();
	
	int sair = 1;//inicializei a variavel com o 1
	
	liq.setdesligar();
	liq.setvelocidademaxima(5);
	liq.setvelocidade(0);
	
	while(sair != 9 ){//e coloquei o while no começo 
	
	System.out.println(" Selecione um opçao: ");
	System.out.println(" =================== ");
	System.out.println(" 1-Ligar ");
	System.out.println(" 2-Desligar ");
	System.out.println(" 3-Mostra Estado ");
	System.out.println(" 4-Trocar Velocidade ");
	System.out.println(" 5-Atribuir Velocidade Maxima ");
	System.out.println(" 9-Fim ");[/code]

[b]Ele ate executa a repetiçao, so que quando eu faço a seleçao “9” o programa ainda continua executando !
outra coisa, quando seleciono “3” e informado que “A velocidade atual do liquidificador é: 49”

De onde ta saindo isso ? jato ficando doido. :x

obrigado a todos[/b] :stuck_out_tongue:

Opa falei bobagem…

pensando…

Nossa Diego parece que esta tudo certo !
bom ai vai o “Bean”, obrigado por ensinar esse termo!

[code]public class Liquidificador {

private int  velocidade;
private int  velocidademaxima;
private char estado;

public void setvelocidade( int v){
	velocidade = v;
}
public int getvelocidade(){
	return velocidade;
}
public void setvelocidademaxima( int vm){
	velocidademaxima = vm;
}
public int getvelocidademaxima(){
	return velocidademaxima;
}
public void  setdesligar(){
	estado = 'd';
	velocidade = '0';
}
public void setligar(){
	estado = 'L';
	velocidade = '1';
}
public char getestado(){
	return estado;
}

}

[/code]

Abrass

bom, agora eu fiquei perdido no que você quer.

Antes da sua implementação do WHILE, se você apertasse o 9 o seu programa encerrava?
e agora, o que mais você quer implementar?
vamos por partes senão eu fico perdido :smiley:

Isso so acontece quando esta ligado o liquidificador !

[b]Olá Edipo, entao até encerrava mas todo vez perguntava se eu gostaria de continuar !

eu gostaria de fazer se possivel pelo While da seguinte forma:

Se eu digitar o numero “1”

ele mostre a mensagem de liquidificador ligado e volte ao menu principal, assim sucessivamente.

So que quando eu seleciono o “9”
ele nao termina o programa, e volta ao menu inicial.


O outro problema e quando o liquidifidor esta ligado e eu digito “3-mostrar estado”, a velocidade aparece como 49 !

como resolvo isso, pelo amor do meu santo crispin
uahuahahuahuahauhhuahahhau

obrigado.[/b]

ae Manolo, posta teu código modificado pra eu dar uma olhada, fazendo favor :slight_smile:

Tá joia edipo, desculpa enhe o saco cara ! :oops:

[code]import java.util.Scanner;
public class Usaliquidificador {

public static void main (String args []) {
    	
	Scanner input = new Scanner(System.in);
	Liquidificador liq = new Liquidificador();
	
	int sair = 1;
	
	liq.setdesligar();
	liq.setvelocidademaxima(5);
	liq.setvelocidade(0);
	
	while(sair != 9 ){
	
	System.out.println(" Selecione um opçao: ");
	System.out.println(" =================== ");
	System.out.println(" 1-Ligar ");
	System.out.println(" 2-Desligar ");
	System.out.println(" 3-Mostra Estado ");
	System.out.println(" 4-Trocar Velocidade ");
	System.out.println(" 5-Atribuir Velocidade Maxima ");
	System.out.println(" 9-Fim ");
	
	int escolha = input.nextInt();input.nextLine();
	
	switch(escolha){
		
		case 1:
			
			if (liq.getestado() == 'd'){
				liq.setligar();
				System.out.println(" Liquidificador acaba de entrar em funcionamento ");
			}else{
				System.out.println(" ERRO: Liquidificador ja em funcionamento ");
			}
			break;
			
		case 2:
			
			if (liq.getestado() == 'L'){
				liq.setdesligar();
				System.out.println(" Liquidificador acaba de ser desligado ");
			}else{
				System.out.println(" Erro: Liquidificador ja esta desligado ");
			}
			break;
			
		case 3:
			
			System.out.println(" A velocidade atual do liquidificador é: " + liq.getvelocidade());
			System.out.println("");
			System.out.println(" A velocidade maxima do liquidificador é: " + liq.getvelocidademaxima());
			System.out.println("");
			System.out.println(" O estado atual do liquidificador é: " + liq.getestado());
			
			break;
			
		case 4:
			
			System.out.println(" Por favor informe uma velocidade positiva maior que zero e no maximo " + liq.getvelocidademaxima());
			
			 int vel = input.nextInt();input.nextLine();
			 liq.setvelocidade(vel);
			 
			 if (liq.getvelocidade() <= 0  ){
			 	System.out.println(" ERRO: Informe um numero positivo maior que 0 ");
			 }else if (liq.getvelocidade() > liq.getvelocidademaxima() ){
			 	System.out.println(" Erro: informe uma velocidade menor do que 5 ");
			 }else
			 	System.out.println(" Liquidificador operando com a nova velocidade: " + liq.getvelocidade());
			
			break; 	    			
	
		case 5:
			
			System.out.println(" Digite uma nova velocidade maxima ! ");
			System.out.println("");
			System.out.println(" Que seja maior que zero e positivo. ");
			
			int velm = input.nextInt();input.nextLine();
			liq.setvelocidademaxima(velm);
			
			if(liq.getvelocidademaxima() <= 0){
				System.out.println(" ERRO: Informe um numero positivo maior que 0 ");
			}else if (liq.getvelocidademaxima() < liq.getvelocidade()){
				System.out.println(" ERRO: Informe uma velocidade maior que a atual que esta em: " + liq.getvelocidade());
			}else
				System.out.println(" Nova velocidade maxima atribuida no liquidificador no valor de: " + liq.getvelocidademaxima());
			
			break;				 	
		
		case 9:
			
			System.out.println (" Obrigado ");
			       
			break;
				 	
			} 
		}		        
	}	
}

[/code]

Cara que ta me deixando mais encucado e a questa de vc aperta o “3”, e ele mostra a velocidade como 49 depois de estar ligado !

Que isso manolo, ninguém nasceu sabendo brother, estamos todos aqui para aprender e ajudar

então você declara

int sair = 1;  

só que em momento algum você digita agrega outro valor a ele,permanecendo sempre com valor 1, assim ele sempre vai cair no seu while

while(sair != 9 )

faça o seguinte, retire a condição while

e faça assim:

[code]case 9:

            System.out.println (" Obrigado ");  
            System.exit(0);
            break;  

[/code]

assim quando você apertar o 9 ele irá sair, eu sei que não é 100% isso que você quer
você quer que toda vez que termine uma operação no case ele volte ao menu.
quando eu chegar em casa depois da facul eu vejo isso, se ninguém resolver…

já o caso da velocidade aparecer 49 eu nem imagino o que seja, preciso ver a classe LIQUIDIFICADOR.

[]’

[b]Po legal Edipo, o problema que tenho medo de fazer com o o metodo System.exit(), e o professor começar enbaçar perguntando de onde eu tirei !!!
mas ja e bem valido a ajuda Edipo ! Se vc pude me ajudar sobre a outra questao eu fico muito agradecido, pois agora quem esta indo para aula sou eu !
uahuahuahuahuahahuahuah

abrass[/b]

Oi,

Como o pessoal está complicando (no bom sentido), resolvi ajudar.

Primeiro, para forçar o looping vamos utilizar do{}while{}

Segue a classe Usaliquidificador.java

[code]import java.util.Scanner;
public class UsaLiquidificador {

public static void main (String args []) {
    	
	Scanner input = new Scanner(System.in);
	Liquidificador liq = new Liquidificador();
	
	int sair = 1;
	
	liq.setdesligar();
	liq.setvelocidademaxima(5);
	liq.setvelocidade(0);
	
	int escolha;
	
	do 
	{

	    	
	    	System.out.println(" Selecione um opçao: ");
	    	System.out.println(" =================== ");
	    	System.out.println(" 1-Ligar ");
	    	System.out.println(" 2-Desligar ");
	    	System.out.println(" 3-Mostra Estado ");
	    	System.out.println(" 4-Trocar Velocidade ");
	    	System.out.println(" 5-Atribuir Velocidade Maxima ");
	    	System.out.println(" 9-Fim ");
	    	
	    	escolha = input.nextInt();input.nextLine();
	    	
	    	switch(escolha){
	    		
	    		case 1:
	    			
	    			if (liq.getestado() == 'd'){
	    				liq.setligar();
	    				System.out.println(" Liquidificador acaba de entrar em funcionamento ");
	    			}else{
	    				System.out.println(" ERRO: Liquidificador ja em funcionamento ");
	    			}
	    			break;
	    			
	    		case 2:
	    			
	    			if (liq.getestado() == 'L'){
	    				liq.setdesligar();
	    				System.out.println(" Liquidificador acaba de ser desligado ");
	    			}else{
	    				System.out.println(" Erro: Liquidificador ja esta desligado ");
	    			}
	    			break;
	    			
	    		case 3:
	    			
	    			System.out.println(" A velocidade atual do liquidificador é: " + liq.getvelocidade());
	    			System.out.println("");
	    			System.out.println(" A velocidade maxima do liquidificador é: " + liq.getvelocidademaxima());
	    			System.out.println("");
	    			System.out.println(" O estado atual do liquidificador é: " + liq.getestado());
	    			
	    			break;
	    			
	    		case 4:
	    			
	    			System.out.println(" Por favor informe uma velocidade positiva maior que zero e no maximo " + liq.getvelocidademaxima());
	    			
	    			 int vel = input.nextInt();input.nextLine();
	    			 liq.setvelocidade(vel);
	    			 
	    			 if (liq.getvelocidade() <= 0  ){
	    			 	System.out.println(" ERRO: Informe um numero positivo maior que 0 ");
	    			 }else if (liq.getvelocidade() > liq.getvelocidademaxima() ){
	    			 	System.out.println(" Erro: informe uma velocidade menor do que 5 ");
	    			 }else
	    			 	System.out.println(" Liquidificador operando com a nova velocidade: " + liq.getvelocidade());
	    			
	    			break; 	    			
	    	
	    		case 5:
	    			
	    			System.out.println(" Digite uma nova velocidade maxima ! ");
	    			System.out.println("");
	    			System.out.println(" Que seja maior que zero e positivo. ");
	    			
	    			int velm = input.nextInt();input.nextLine();
	    			liq.setvelocidademaxima(velm);
	    			
	    			if(liq.getvelocidademaxima() <= 0){
	    				System.out.println(" ERRO: Informe um numero positivo maior que 0 ");
	    			}else if (liq.getvelocidademaxima() < liq.getvelocidade()){
	    				System.out.println(" ERRO: Informe uma velocidade maior que a atual que esta em: " + liq.getvelocidade());
	    			}else
	    				System.out.println(" Nova velocidade maxima atribuida no liquidificador no valor de: " + liq.getvelocidademaxima());
	    			
	    			break;				 	
	    		
	    		case 9:
	    			
	    			System.out.println (" Obrigado ");
	    			       
	    			break;
	    				 	
	    			} 
	    		
	}
	while (escolha != 9);   
}	

}[/code]

Agora, o resultado 49 para a velocidade máxima é porque na sua classe Liquidificador.java no método setLigar(), você está atribuindo para uma variavel inteira
o conteudo char. (velocidade = ‘1’:wink:

Então, basta corrigir… ficando a classe:

[code]public class Liquidificador {

    private int  velocidade;
    private int  velocidademaxima;
    private char estado;
    
    public void setvelocidade( int v){
    	velocidade = v;
    }
    public int getvelocidade(){
    	return velocidade;
    }
    public void setvelocidademaxima( int vm){
    	velocidademaxima = vm;
    }
    public int getvelocidademaxima(){
    	return velocidademaxima;
    }
    public void  setdesligar(){
    	estado = 'd';
    	velocidade = 0;
    }
    public void setligar(){
    	estado = 'L';
    	velocidade = 1;
    }
    public char getestado(){
    	return estado;
    }
    
}[/code]

Acho que é isso!

Tchauzin!

[b]Nossss, deu certo Lina ! :stuck_out_tongue:

Realmente sobre eu estar atribuindo char a variavel inteira foi um grande descuido !
uahuahuahahahuhuahahahuah

mas tenho 2 perguntinhas ainda.

Nao teria como utilizar o comando while na classe ?

e porque, declarar a variavel escolha antes do comando ?
[/b]

[code]liq.setvelocidade(0);

    int escolha;   
       
    do   
    {   

               
            System.out.println(" Selecione um opçao: ");   
            System.out.println(" =================== ");   
            System.out.println(" 1-Ligar ");   [/code]

Muito obrigado pela ajuda lina, fico muito grato !
agora vou tentar resolver outro execicio proposto pelo professor rsrsrs…
:x

abraçoss

Oi,

Então… nós utilizamos a função while. Exatamente por isso a variavel escolha foi criada fora do “comando”.

Utilizamos a função do{} (Forçando executar o programa 1 vez) e logo em seguida while (escolha != 9)

Isso irá fazer com que ele fique em looping até a variavel escolha se tornar 9.

Tchauzin!

oh brother foi mal complicar teu tópico, é que cada vez eu entendia uma coisa mas era outra, hahaha

mas a Lina já resolveu tudo. :smiley:

Agora coloca no título do teu tópico [RESOLVIDO], fazendo favor.