Criando um menu de opções

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:

[quote]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;
}
}[/quote]

Então, seria mais ou menos o seguinte:

[quote]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 ());

      }

[/quote]

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.

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

[quote]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.”);
}
}[/quote]

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

if (getMenu() == 1)

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."); } }

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:

[quote]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");
    }
  }

}
[/quote]
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…

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?

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.

[quote]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 ()));[/quote]

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:

[quote]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;
		
		
	}
	
	
	}[/quote]

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.

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:

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

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]

Ok, obrigado.

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