Criando um menu de opções

12 respostas
madlinux

Galera, é o seguinte. Tenho que criar um menu de opções para o usuário entrar em uma sessão. E terei que usar a classe a seguir:

<blockquote>import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;
public class Leitura

{

public static String entra ()

{

InputStreamReader c = new InputStreamReader (System.in);

BufferedReader d = new BufferedReader ©;;

String s = “”;

try

{

s = d.readLine ();

}

catch (IOException e)

{

System.out.println (Erro de entrada);

}

return s;

}

}</blockquote>

Então, seria mais ou menos o seguinte:

public static void main (String args [])

{
	Leitura ll = new Leitura ();
	System.out.println ("Digite a sessao desejada: ");
	ll.entra (String ses ());
	System.out.print (ll.entra ());

      }

O que eu queria era armazenar este numero, fazendo a conversão, lógico, evocando o metodo entra da outra classe, e imprimir o numero digitado. Mas tá faltando alguma coisa. Poderiam me ajudar? Pois sem ao menos saber este começo, eu não vou poder seguir em frente usando o switch.

12 Respostas

madlinux

Bom, se alguem souber um jeito mais simples, me diga. Por enquanto, eu fiz este código aqui:

<blockquote>public class Inicio

{

private int menu;

public void setmenu (int mn)

{

menu = mn;

}

public int getmenu ()

{

return menu;

}	

public static void main (String args [])

{

Inicio IN = new Inicio ();

Leitura L = new Leitura ();

System.out.println ("\t###Bem vindo ao controle de vistorias de veiculos!###\n");

System.out.println ("  *Entre com o tipo de veiculo para cadastrar ->");

System.out.println (1- Para veiculos de passeio.\n+2- Para veiculos de carga.\n);

IN.setmenu (Integer.parseInt (L.entra ()));

if ( *== 1)

System.out.println (Veiculos de passeio.);

else

System.out.println (Veiculos de carga.);

}

}</blockquote>

Agora a questão é: o que eu coloco dentro do if no lugar do asterisco, pra dar certo?? :frowning:

ViniGodoy

if (getMenu() == 1)

ViniGodoy

Há uma maneira mais fácil de fazer a leitura do console a partir do Java 5. É usando a classe Scanner.

public class Inicio { public static void main (String args []) { Scanner reader = new Scanner(System.in); System.out.println ("\t###Bem vindo ao controle de vistorias de veiculos!###\n"); System.out.println (" *Entre com o tipo de veiculo para cadastrar -&gt\n"); System.out.println ("1- Para veiculos de passeio."); System.out.println ("2- Para veiculos de carga."); int lido = reader.nextInt(); if (lido == 1) System.out.println ("Veiculos de passeio."); else System.out.println ("Veiculos de carga."); } }

madlinux

Ok, colega. Obrigado. O fato de eu estar usando essa classe Leitura, é porque o professor tá priorizando ela na grade, pelo fato de usar um tratamento de exceção. Caso contrário, eu usaria a Scanner mesmo, que é mais fácil.
Agora o seguinte, não estou conseguindo fazer o switch, usando isso. O códico que eu usei foi o seguinte:

<blockquote>public class sw

{

public static void main (String args [])

{

Leitura leit = new Leitura ();

int valor = 0;

leit.entra ();

switch (valor)

{

case 0:

System.out.println (valor zero);

break;
case 1:
        System.out.println ("valor um");
    }
  }

}

Essas linhas são só um começo. Como eu poderia fazer um switch simples para seguir em frente com o programa? Pois nem esse eu tou conseguindo usando essa classe leitura…

ViniGodoy

Seu switch me parece certo. Mas você deve gardar o valor lido na variável valor, ou só vai retornar 0.

Vai ser algo como
int valor = Integer.parseInt(leitura.getValor());

Não sei se esse método getValor() existe, consulte a classe Leitura para saber qual é o método certo. Aqui, estou assumindo que é um método que retorna String.

Depois, basta trocar o System.out.println() do seu programa por uma chamada de função, que vai para a próxima área do programa que você quer e boa sorte!!!

PS: Você não indenta código? Ou foi só um problema no copy&paste?

madlinux

Vini, obrigado pelo apoio.
Bom, eu idento sim, mas na hora de colar tá aparecendo sem a identação.
E se eu usar o Code, sai fora do quadro.
Bom, depois de ralar, muito, consegui fazer 70% do programa que eu quero. Mas preciso da ajuda de vocês pra terminar. Não consigo fazer o switch final usando vetor.
Seria o seguinte. Uma garagem cadastra um determinado numero de carros ou caminhões. Se o vetor é 5, seria 5 carros. E por aí vai. Mas tem que ter um switch no final, para imprimir o carro desejado. Por exemplo, se eu quisesse o terceiro carro ou caminhão, digitaria 3 e retornaria, através do metodo get, os dados do terceiro veículo cadastrado.

Vejam o que eu fiz até agora, e se possível, me ajudem a fazer o swicht final, porque já tentei e não consigo.

<blockquote>public class Inicio

{

private int menu;

public void setmenu (int mn)

{

menu = mn;

}

public int getmenu ()

{

return menu;

}	

public static void main (String args [])

{

Inicio IN = new Inicio ();

Leitura Lt = new Leitura ();

int vet1 = 1;

CarroPasseio Cp[] = new CarroPasseio [vet1];

Caminhao Cm[] = new Caminhao [vet1];
System.out.println ("\t###Bem vindo ao controle de vistorias de veiculos!###\n");
	System.out.println ("  *Entre com o tipo de veiculo para cadastrar e pressione enter ->");
	System.out.println ("1- Para veiculos de passeio.\n"+"2- Para veiculos de carga.\n");
	IN.setmenu (Integer.parseInt (Lt.entra ()));
	if (IN.getmenu () == 1)
	{
		System.out.println ("Digite os dados dos veiculos de passeio: \n");
		for (int i = 0; i < Cp.length; i++)
		{
		
			Cp[i] = new CarroPasseio ();
			
			System.out.println ("Veiculo " +(i+1));
			
			System.out.println ("Modelo do carro: ");
			Cp[i].setmodelo (Lt.entra ());
			
			System.out.println ("Potencia do carro: ");
			Cp[i].setpotencia (Integer.parseInt (Lt.entra ()));

			System.out.println ("Peso do carro: ");
			Cp[i].setpeso (Integer.parseInt (Lt.entra ()));

			System.out.println ("Velocidade maxima do carro: ");
			Cp[i].setvelmax (Integer.parseInt (Lt.entra ()));

			System.out.println ("Preco do carro: ");
			Cp[i].setprecov (Double.parseDouble (Lt.entra ()));

			System.out.println ("Cor do carro: ");
			Cp[i].setcor (Lt.entra ());

			System.out.println ("Numero de cilindros do carro: ");
			Cp[i].setNumCilindro (Integer.parseInt (Lt.entra ()));
		}
	
	}
	
	else if (IN.getmenu () == 2)
		
	{
						
		System.out.println ("Digite os dados dos veiculos de carga: \n");
		for (int i = 0; i < Cm.length; i++)
		{
		
			Cm[i] = new Caminhao ();
			
			System.out.println ("Veiculo " +(i+1));
		
			System.out.println ("Numero de cilindros do caminhao: ");
			Cm[i].setNumCilindro (Integer.parseInt (Lt.entra ()));
			
			System.out.println ("Potencia do caminhao: ");
			Cm[i].setpotencia (Integer.parseInt (Lt.entra ()));

			System.out.println ("Peso do caminhao: ");
			Cm[i].setpeso (Integer.parseInt (Lt.entra ()));

			System.out.println ("Velocidade maxima do caminhao: ");
			Cm[i].setvelmax (Integer.parseInt (Lt.entra ()));

			System.out.println ("Preco do caminhao: ");
			Cm[i].setprecov (Double.parseDouble (Lt.entra ()));
			
			System.out.println ("Carga maxima do caminhao em toneladas: ");
			Cm[i].setprecov (Double.parseDouble (Lt.entra ()));
			
			System.out.println ("Altura maxima do caminhao: ");
			Cm[i].setprecov (Integer.parseInt (Lt.entra ()));
			
			System.out.println ("Comprimento do caminhao: ");
			Cm[i].setprecov (Integer.parseInt (Lt.entra ()));
		}
	}
		
		else 
			System.out.println ("Digite um numero valido!");

		
	System.out.println ("\t\t######Cadastro terminado !######\n");
	System.out.print ("Digite o numero do veiculo para consulta: ");
	IN.setmenu (Integer.parseInt (Lt.entra ()));</blockquote>
madlinux

Galera, a situação no momento é a seguinte. Eu simplifiquei o código, acertando o switch. Também ajeitei para imprimir o veículo desejado. E coloquei parametros nos metodos para facilitar.
Funcionou certinho, mas apenas tendo um vetor de tamanho fixo pré definido para cadastrar. Ou seja, colocando vetor de tamano 5, cadastra 5 carros. 3 cadastra tres carros, e por aí vai. A única coisa que tá faltando é uma opção de escolher quantos carros serão cadastrados, e eu gostaria de apoio pra terminar esse programa.
Vejam como o programa está agora, mas tá dando erro no get, depois das alterações. Só falta ajeitar esse lance de vetor dinamico. Tipo assim: o usuário digita 5 e 5 carros serão cadastrados. Vejam o código:

public class Inicio
{

public static void main (String args [])
{
	
	Leitura Lt = new Leitura ();
	
	
	
	
	
	System.out.println ("\t###Bem vindo ao controle de vistorias de veiculos!###\n");
	System.out.println ("  *Entre com o tipo de veiculo para cadastrar e pressione enter ->");
	int x = Integer.parseInt (Lt.entra ("1- Para veiculos de passeio.\n" + "2- Para veiculos de carga.\n"));
	
	switch (x)
	{
	
		case 1:
			
		
		int a = Integer.parseInt (Lt.entra ("Digite a quantidade de veiculos para cadastrar: "));
		CarroPasseio Cp[] = new CarroPasseio [a];
		
		System.out.println ("Digite os dados dos veiculos de passeio: \n");
		for (int i = 0; i < Cp.length; i++)
		{
			
			
			Cp[i] = new CarroPasseio ();
			
			System.out.println ("Veiculo " +(i+1));
			
		
			Cp[i].setmodelo (Lt.entra ("Modelo do carro: "));
			Cp[i].setpotencia (Integer.parseInt (Lt.entra ("Potencia do carro: ")));	
			Cp[i].setpeso (Integer.parseInt (Lt.entra ("Peso do carro: ")));	
			Cp[i].setvelmax (Integer.parseInt (Lt.entra ("Velocidade maxima do carro: ")));
			Cp[i].setprecov (Double.parseDouble (Lt.entra ("Preco do carro: ")));	
			Cp[i].setcor (Lt.entra ("Cor do carro: "));	
			Cp[i].setNumCilindro (Integer.parseInt (Lt.entra ("Numero de cilindros do carro: ")));
	
		}
		break;
	
	
		case 2:
		
		
		int b = Integer.parseInt (Lt.entra ("Digite a quantidade de veiculos para cadastrar: "));				
		Caminhao Cm[] = new Caminhao [b]; 
		
		System.out.println ("Digite os dados dos veiculos de carga: \n");
		for (int i = 0; i < Cm.length; i++)
		{
			
			
			Cm[i] = new Caminhao ();
			
			System.out.println ("Veiculo " +(i+1));
		
		
			Cm[i].setNumCilindro (Integer.parseInt (Lt.entra ("Numero de cilindros do caminhao: ")));		
			Cm[i].setpotencia (Integer.parseInt (Lt.entra ("Potencia do caminhao: ")));		
			Cm[i].setpeso (Integer.parseInt (Lt.entra ("Peso do caminhao: ")));		
			Cm[i].setvelmax (Integer.parseInt (Lt.entra ("Velocidade maxima do caminhao: ")));
			Cm[i].setprecov (Double.parseDouble (Lt.entra ("Preco do caminhao: ")));		
			Cm[i].setCargaMaxima (Double.parseDouble (Lt.entra ("Carga maxima do caminhao em toneladas: ")));		
			Cm[i].setAlturaMaxima (Integer.parseInt (Lt.entra ("Altura maxima do caminhao: ")));			
			Cm[i].setcomprimento (Integer.parseInt (Lt.entra ("Comprimento do caminhao: ")));
		}
		break;
		
		default:
			System.out.println ("Digite um numero valido!");
		break;
	}		
	System.out.println ("\t\t######Cadastro terminado !######\n");
	int y = Integer.parseInt (Lt.entra ("Digite o numero do veiculo cadastrado para consultar os dados: "));
	
	switch (x)
	{
		case 1:
		
		System.out.println ("Modelo: " + Cp[y - 1].getmodelo ());
		System.out.println ("Potencia: " + Cp[y - 1].getpotencia () + " cavalos");
		System.out.println ("Peso: " + Cp[y - 1].getpeso () + " kg");
		System.out.println ("Velocidade maxima: " + Cp[y - 1].getvelmax () + " km/h");
		System.out.println ("Preco" + "R$ " + Cp[y - 1].getprecov ());
		System.out.println ("Cor: " + Cp[y - 1].getcor ());
		System.out.println ("Numero de cilindros: " + Cp[y - 1].getNumCilindro ());
		break;
		
		case 2:
		
		System.out.println ("Numero de cilindros: " + Cm[y - 1].getNumCilindro ());
		System.out.println ("Potencia: " + Cm[y - 1].getpotencia () + " cavalos");
		System.out.println ("Peso: " + Cm[y - 1].getpeso () + " kg");
		System.out.println ("Velocidade maxima: " + Cm[y - 1].getvelmax () + " km/h");
		System.out.println ("Preco" + "R$ " + Cm[y - 1].getprecov ());
		System.out.println ("Carga maxima: "+ Cm[y - 1].getCargaMaxima () + " toneladas");
		System.out.println ("Altura maxima: " + Cm[y - 1].getAlturaMaxima () + " metros");
		System.out.println ("Comprimento: " + Cm[y - 1].getcomprimento () + " metros");
		break;
		
		
	}
	
	
	}</blockquote>
ViniGodoy

No lugar de um vetor primitivo, use a classe List.

List<CarroPasseio> cpList = new ArrayList<CarroPasseio>();

Não precisa dizer o tamanho. O list redimensionará quando for necessário.

Depois, para adicionar um carro:
cpList.add(carroPasseio);

Para remover o carro:
cpList.remove(carroPasseio);

E para pegar um carro pelo índice:
cpList.get(0);

etc…

Dê uma pesquisada por Collections Framework. Já deve te ajudar.

madlinux

Valeu de novo Vini.
Mas o caso é que o professor nosso, meio conservador, exige que seja feito o exercício usando o método tradicional. Consequentemente, eu não poderia usufruir dessa técnica mais funcional… :frowning:

peerless

Conceitos de Tamanho Físico e Tamanho Lógico.

Seu professor, doidão por sua vez, não passou o MÁXIMO de registros permitidos (tamanho físico) ?
além de não permitir métodos dinâmicos…
então ele anda tomando muito jaba e não java

[]s

ViniGodoy

Se você sabe o tamanho do array, basta criar um vetor com esse amanho:

Carro[] vetorDeCarros = new Carro[tamanho];

Caso contrário, terá que redimensionar o vetor, caso atinja o limite máximo. Como isso não é possível, será necessário criar um novo vetor e copiar os dados do original.

Por exemplo, esse método de adicionar faz isso:

if (proximaPosicao == vetorDeCarros.size() {
    Carro[] novoVetor = new Carro[vetorDeCarros.size() * 2]; //O dobro do antigo
    System.arrayCopy(vetorDeCarros, 0, novoVetor, 0, vetorDeCarros.size());
     vetorDeCarros = novoVetor;
}

//Agora que cabe no vetor, adicionamos o carro.
vetorDeCarros[proximaPosicao++] = carro;[/code]
madlinux

Ok, obrigado.

Eu realmente detesto professores que não dominam a matéria e a estudam às pressas pra dar aula.

Criado 31 de março de 2007
Ultima resposta 7 de abr. de 2007
Respostas 12
Participantes 3