'equalsIgnoreCase' nao me deixa sair do 'do...while'

8 respostas
rafa.spimenta

salve salve GUJ!

boa noite galera!

estou elaborando com meus amigos de turma um trabalho, esse trabalho deve ser uma aplicativo java com informaçoes da materia de estatistica. bom... to fazendo uma do...while pra exibir o menu, porem quando eu chego na seguinte parte:
System.out.print("\nDeseja interromper o cadastramento ? (S / N )");
						exit = ler.next();
						if ( "S".equalsIgnoreCase(exit) )
							break;
O cadastro num enterrompe nem a pau! to quebrando a cabeça aki! segue abaixo todo o códgo do menu:
import java.util.*;

public class Menu {

	public static void main(String[] args) {
		Scanner ler = new Scanner(System.in);
		String matriz[][] = new String[100][6];
		Cadastro aut = new Cadastro();
		int opcao = 0;
		String exit = null;
		
		do {
			System.out
					.println("\n\n***********Aplicação para controle de vendas de automóveis***********\n");
			System.out.println("***************************************");
			System.out.println("* 1 - Cadastro de Automóveis Vendidos *");
			System.out.println("* 2 - Informações Gerenciais          *");
			System.out.println("* 9 - SAIR da Aplicação               *");
			System.out.println("***************************************");
			System.out.print("\nDigite a opção desejada: ");
			opcao = ler.nextInt();
			switch (opcao) {
			case 1: {
				do {
					for (int i = 0; i < matriz.length; i++) {
						aut.cadastra( matriz, i );
						System.out.print("\nDeseja interromper o cadastramento ? (S / N )");
						exit = ler.next();
						if ( "S".equalsIgnoreCase(exit) )
							break;
					}
				} while ( ( exit != "s" ) || ( exit != "S"  ) );
			break;
			}
			case 2: {
				if (matriz[0][0] == null) {
					System.out.print("Não existem automóveis cadastrados!!");
					break;
				}
				int cont = 0;
				int i = 0;
				for (i = 0; i < matriz.length; i++) {
					if (matriz[i][0] == null) {
						cont = i;
						break;
					}
				}
				for (i = 0; i < cont; i++) {
					for (int j = 0; j < 5; j++) {
						System.out.print(matriz[i][j] + "  ");
					}
					System.out.println();
				}
				break;
			}
			case 9:
				break;
			default:
				System.out.println("Opcao invalida");
				break;
			}

		} while (opcao != 9);

		System.out.println("Programa encerrado");

	}
}

tem varias outras coisas que estou fazendo pra melhorar, mas qualquer dica é bem vinda,
Nota: o aplicativo ainda ta em desenvolvimento e se for necessario envios as outras classes.
Obrigadoo!!!!!!!!!!!!!!!!!

8 Respostas

rafa.spimenta

Eu nao estou conseguindo intenrromper o cadastro

vlw!

rafa.spimenta

Eu nao estou conseguindo intenrromper o cadastro

vlw!

rafa.spimenta

Eu nao to conseguindo intenrromper o cadastro

vlw!

rafa.spimenta

Eu nao to conseguindo intenrromper o cadastro

vlw!

rafa.spimenta

Eu nao to conseguindo intenrromper o cadastro

vlw! :!:

rafa.spimenta

foi mal!
era pra enviar soh uma msg
eu n sei como deletar
:oops:

furutani

Ola

Voce deveria usar o equals no trecho abaixo

while ( ( exit !="s" ) || ( exit != "S" ) );

Ou seja

while ( ( !exit.equals("s") ) || ( !exit.equals("S" ) ));
L

Primeiro uma coisa: por que você coloca um do-while envolvendo um for? Pra mim está sendo redundante e, óbvio, o break só sai do laço em que está imediatamente envolvido, não de outros mais externos. Então pela lógica, não há porque querer que o break escape do do-while também.

Segundo: considerando que você queira manter o do-while, essa lógica que você escreveu é o mesmo que dizer que quer um loop infinito. Você está dizendo: “Interpretador Java, execute esse laço enquanto a saída não for ‘essezinho’ ou enquanto a saída não for ‘essezão’”. Aí chega o momento em que o usuário aperta ‘essezinho’, e aí o interpretador Java pensa: “Hum! A saída é ‘essezinho’, então a primeira verificação falhou, mas a segunda não, então vou continuar o laço”.

A lógica seria

while ( ( !exit.equals("S") ) && (!exit.equals("s")))

ou

while (!(exit.equals("S") || exit.equals("s")))

ou

while (!exit.equalsIgnoreCase("S"))

ou então corta logo esse do-while.

Criado 29 de setembro de 2007
Ultima resposta 29 de set. de 2007
Respostas 8
Participantes 3