[RESOLVIDO] Identificar Erro na classe - Erro Simples

12 respostas
lucas_guj

Galera estou com uma baita DOR DE CABEÇA do !@!%$&!@%$&!@… HADUIOHASUIOHDIOASHI…Por não conseguir entender o porque desse erro maldito na minha classe. Não chega a ser um erro informado pelo compilador, é um erro no código acredito eu e em tempo de execução. Vou pedir que copiem e colem em suas IDE’S e vejam o que acontece:

Tudo esta ok, menos isso…

Quando eu seleciono para cadastrar um novo vendedor, ou seja, aperto s ou S , pela primeira vez ele me pede para informar o total de vendas, eu informo. Ok. POREM, ai que esta o maldito erro que não entendo. Quando eu insiro o total ele tem que perguntar novamente se eu quero cadastrar um novo vendedor, so que ele pergunta e logo depois diz que a reposta é inválida. Está ai o código para quem puder me ajudar.

// Exercício 7.10: Comissoes.java
import java.util.Scanner;

public class Comissoes
{
	public static void main( String[] args )
	{
		Scanner input = new Scanner( System.in );
		String resposta = "";
		boolean continuar = true;
		int[] contador = new int[ 11 ];
		double vendas;
		
		while( continuar )
		{
			while( resposta.equals( "S" ) || !resposta.equals( "N" ) )
			{
				System.out.print( "Cadastrar novo funcionario? [S/N]: " );
				resposta = input.nextLine();
				resposta = resposta.toUpperCase();
				
				if( resposta.equals( "N" ) )
					continuar = false;
				else if( !resposta.equals( "S" ) )
					System.out.println( "Resposta inválida !" );
				
				if( resposta.equals( "S" ) )
				{
					System.out.print( "Total de vendas do funcionário: " );
					vendas = 200 + ( 0.09 * input.nextDouble() ); // R$200 + %9 do total das vendas
					
					if( vendas >= 200 && vendas < 300 )
						++contador[2];
					else if( vendas >= 300 & vendas < 400 )
						++ contador[3];
					else if( vendas >= 400 & vendas < 500 )
						++ contador[4];
					else if( vendas >= 500 & vendas < 600 )
						++ contador[5];
					else if( vendas >= 600 & vendas < 700 )
						++ contador[6];
					else if( vendas >= 700 & vendas < 800 )
						++ contador[7];
					else if( vendas >= 800 & vendas < 900 )
						++ contador[8];
					else if( vendas >= 900 & vendas < 10000 )
						++ contador[9];
					else if( vendas >= 10000 )
						++ contador[10];
				} // fim da condição caso resposta seja SIM
			}
		} // fim do loop continuar
		
		for( int cont = 2; cont < contador.length; cont++ )
		{
			if( cont == 10 )
				System.out.printf( "R$1.000 e acima: %d\n", contador[cont] );
			else
				System.out.printf( "R$%d-%d99: %7d\n", cont *100, cont, contador[cont] );
		}
	}
}

12 Respostas

A

cara,

seu problema ai é de logica, vc vai ficar sempre nesse loop, qdo a resposta for S.

PS: troque seu equals por equalsIgnoreCase

t+

lucas_guj

Troquei e o erro continua, tentei trocar todos, depois so alguns, mesmo assim continua. Obrigado pela tentativa

A

mas esse não é o erro, so foi uma dica… rsrs

lucas_guj

ahh sim.

pmlm

Não uses nextDouble, usa nextLine e converte para double.

lucas_guj

Cara, fiz o que falou e deu certo. Obrigado. Troquei o:

System.out.print( "Cadastrar novo funcionario? [S/N]: " );  
                resposta = input.nextLine();

POR

System.out.print( "Cadastrar novo funcionario? [S/N]: " );  
                resposta = input.next();

Você ou alguem poderia me explicar o porque ter acontecido isso? Tudo bem meu problema já foi resolvido mais é como se eu tivesse pego cola na hora da prova, fiz mais não entendi, e mais uma coisa porque eu não consigo comparar as strings nas instruções de controle assim:

while( resposta == "S"  || resposta != "N"  )

OU

if( resposta == "S" )

Se eu comparar as strings desse jeito não funciona também poderiam me explicar por quê?

Obrigado pmlm

Marcelo_de_Andrade

http://javafree.uol.com.br/artigo/3932/Comparar-variaveis-==-ou-equals.html

lucas_guj

Entendi mais ou menos

Qr dizer que quando eu comparo

reposta == "S"

Eu estou perguntando a jvm se o meu objeto String resposta que no caso é uma variavel aponta para o mesmo ENDEREÇO que o S?

como o S é um valor que foi armazenado em resposta esse metodo não funciona.
Agora se eu comparo

resposta.equals( "S")

Eu pergunto se o valor S está armazenado no HEAP de resposta?

É isso? Se for eu entendi, se não for eu não entendi.
E alguem poderia explicar a diferença entre next e nextLine, por ter causado aquele erro.

Muito Obrigado pelo link Marcelo de Andrade

lucas_guj

Alguém poderia me responder por favor.

M

cara, tenta assim, coloca uma condição infinita no lugar do while (continuar) tipo:

while(1>0){ //função }

assim voce vai conseguir testar se é o seu continuar que ta dando merda

tguerra

Oi!

Dei uma corrigida na lógica do teu código, executa aí e vê se é isso que você quer:

import java.util.Scanner;  
   
 public class Comissoes  
 {  
     public static void main( String[] args )  
     {  
         Scanner input = new Scanner( System.in );  
         String resposta = "";  
         boolean continuar = true;  
         int[] contador = new int[ 11 ];  
         double vendas;  
           

        	 do {  
                 System.out.print( "Cadastrar novo funcionario? [S/N]: " );  
                 resposta = input.nextLine();  
                 resposta = resposta.toUpperCase();  
                 if( resposta.equalsIgnoreCase( "N" ) )  System.out.println( "Resposta inválida !" ); 
             }while(resposta.equalsIgnoreCase("N"));
                                      
                     System.out.print( "Total de vendas do funcionário: " );  
                     vendas = 200 + ( 0.09 * input.nextDouble() ); // R$200 + %9 do total das vendas  
                       
                     if( vendas >= 200 && vendas < 300 )  
                         ++contador[2];  
                     else if( vendas >= 300 & vendas < 400 )  
                         ++ contador[3];  
                     else if( vendas >= 400 & vendas < 500 )  
                         ++ contador[4];  
                     else if( vendas >= 500 & vendas < 600 )  
                         ++ contador[5];  
                     else if( vendas >= 600 & vendas < 700 )  
                         ++ contador[6];  
                     else if( vendas >= 700 & vendas < 800 )  
                         ++ contador[7];  
                     else if( vendas >= 800 & vendas < 900 )  
                         ++ contador[8];  
                     else if( vendas >= 900 & vendas < 10000 )  
                         ++ contador[9];  
                     else if( vendas >= 10000 )  
                         ++ contador[10];  
        for( int cont = 2; cont < contador.length; cont++ )  
         {  
             if( cont == 10 )  
                 System.out.printf( "R$1.000 e acima: %d\n", contador[cont] );  
             else  
                 System.out.printf( "R$%d-%d99: %7d\n", cont *100, cont, contador[cont] );  
         }  
     }  
 }
lucas_guj

tguerra e Matheus Falcade na verdade meu problema já foi resolvido o que resta a minha duvida foi a pergunta que eu fiz sobre o HEAP e a diferença de next para nextLine. Vou colocar resolvido, pois o problema original mesmo ja foi resolvido, mais caso alguem saiba a diferença por favor me responda, procurei no google e nao achei um link que explicasse bem. Sobre o Heap ate acho que entendi mais queria ter certeza se alguem responder o que eu perguntei ali em cima sobre a diferença do equals com ==…

Obrigado

Criado 13 de outubro de 2011
Ultima resposta 20 de out. de 2011
Respostas 12
Participantes 6