While e try catch

Não consigo fazer as exessões… tenho que calcular a media de um aluno…o nome dele deve ser maior que 20 caracteres e nota menor igual a 10…
Aqui esta o codigo que eu consigui fazer…me ajudem. obrigado

import javax.swing.JOptionPane;

public class Media {
public static void main(String[] args) {
String x,x1,x2,x3,x4,resultado;
int n1=0,n2=0,n3=0,n4=0,media=0,soma=0;

	while (true){			
		x = JOptionPane.showInputDialog(null,"Informe seu Nome");
		if (x == null || x.length() > 20)
	try{
					
		break;			
	}
	catch(NumberFormatException Erro){
		JOptionPane.showMessageDialog(null,"inválido!","Erro",0);
		
	}
		x1= JOptionPane.showInputDialog(null,"Informe Nota 1");
		if (x1 == null)
		n1 = Integer.parseInt(x1);
		if (n1< 0 && n1>10)		
	try{					
		n1 = Integer.parseInt(x1);
		break;					
	}
	catch(NumberFormatException Erro){
		JOptionPane.showMessageDialog(null,"inválido!","Erro",0);
		
	}
	}	
	soma = n1+n2+n3+n4;
	media = soma/4;
	resultado = "Media do Aluno:\n" + x + "\n" + media;
	JOptionPane.showMessageDialog(null,resultado);
	System.exit(0);		
	
}

}

Opa…

Cara, o que tu que fazer com esse try? Nâo entendi a tua logica:

[code]
try{

break;
}
catch(NumberFormatException Erro){
JOptionPane.showMessageDialog(null,"inválido!","Erro",0);

} [/code]
Abraços

Bom o meu professor quer que eu use O try catch que é pra tratar excessões…
na parte do “Iforme seu Nome” eu não consigue tratar as excessões: Quando eu digito O nome o programa não vai pra o Outro bloco… A Exceção seria nome menor que 20 caracteres…ai eu usei o length
mas eu digito 30 caracteres e o program não ve o erro…na verdade o erro ta no meu codigo…

Não entendi porque lançar uma exceção para isso, mas assim vai funcionar:

x = JOptionPane.showInputDialog(null,"Informe seu Nome"); 

try{ 
  if (x == null || x.length() > 20) {
       throw new Exception();
  }

}catch(Exception Erro){ 
   JOptionPane.showMessageDialog(null,"inválido!","Erro",0); 
} 

Olá, o NumberFormatException será acionado se vc tentar converte uma String para um tipo numerico que não tem um formato apropriado como no código abaixo

	String x = "2/2";		
	try {
		int y = Integer.parseInt(x);
			
	} catch(NumberFormatException Erro) {
		JOptionPane.showMessageDialog(null,"inválido!","Erro",0);
	}

se vc executar este codigo verá que ele executará o catch, certo??

Também não entendi o porque de usar o try e catch, esse controle vc pode fazer sem eles, mas postei só para exclarecer o que o NumberFormatException faz, blz??

Até mais, Filipe.

Valeu pessoal…consigui fazer…o que vcs acham?

[code]import javax.swing.*;

public class Media
{
public static void main (String[]args)
{
String st, nome;
double nota1 = 0, nota2 = 0, nota3 = 0, nota4 = 0, media;

	while (true)
	{
		nome = JOptionPane.showInputDialog(null, "Informe seu nome!", "Informe", 3);
		if (nome == null) System.exit(0);
		
		nome = nome.trim();
		if (nome.length () >=1 && nome.length() <=20) break;
		
		else
		{
			JOptionPane.showMessageDialog(null, "Informe um nome de 1 a 20 caracteres","Erro",0);
		}
		
	}
	
	while (true)
	{
		st = JOptionPane.showInputDialog(null, "Informe a nota do 1° bimestre!", "Informe",3);
		if (st == null) System.exit(0);
		
		try
		{
			nota1 = Double.parseDouble (st);
			if (nota1 >=0 && nota1 <=100) break;
			else
			{
				JOptionPane.showMessageDialog(null, "A nota deve ser de 0 a 100!", "Erro",0);
			}
		}
		catch(NumberFormatException nfe)
		{
			JOptionPane.showMessageDialog(null,"A nota só deve conter numeros!", "Erro",0);
		}
	}
	
	while (true)
	{
		st = JOptionPane.showInputDialog(null, "Informe a nota do 2° bimestre!", "Informe",3);
		if (st == null) System.exit(0);
		
		try
		{
			nota2 = Double.parseDouble (st);
			if (nota2 >=0 && nota2 <=100) break;
			else
			{
				JOptionPane.showMessageDialog(null, "A nota deve ser de 0 a 100!", "Erro",0);
			}
		}
		catch(NumberFormatException nfe)
		{
			JOptionPane.showMessageDialog(null,"A nota só deve conter numeros!", "Erro",0);
		}
	}
	
	while (true)
	{
		st = JOptionPane.showInputDialog(null, "Informe a nota do 3° bimestre!", "Informe",3);
		if (st == null) System.exit(0);
		
		try
		{
			nota3 = Double.parseDouble (st);
			if (nota3 >=0 && nota3 <=100) break;
			else
			{
				JOptionPane.showMessageDialog(null, "A nota deve ser de 0 a 100!", "Erro",0);
			}
		}
		catch(NumberFormatException nfe)
		{
			JOptionPane.showMessageDialog(null,"A nota só deve conter numeros!", "Erro",0);
		}
	}
	
	while (true)
	{
		st = JOptionPane.showInputDialog(null, "Informe a nota do 4° bimestre!", "Informe",3);
		if (st == null) System.exit(0);
		
		try
		{
			nota4 = Double.parseDouble (st);
			if (nota4 >=0 && nota4 <=100) break;
			else
			{
				JOptionPane.showMessageDialog(null, "A nota deve ser de 0 a 100!", "Erro",0);
			}
		}
		catch(NumberFormatException nfe)
		{
			JOptionPane.showMessageDialog(null,"A nota só deve conter numeros!", "Erro",0);
		}
	}
	media = ((nota1 + nota2 + nota3 + nota4) / 4);
	
	if (media >= 70){
		st = ("Parabéns Você Foi Aprovado");					
	}
	if (media == 100){
		st = ("Nota maxima");						
	}
	if (media < 70){
		st = ("Reprovado");			
	}
	
	JOptionPane.showMessageDialog(null, "A soma das  notas foi: " + (nota1 + nota2 + nota3 + nota4),"Soma",2);
	
	
	JOptionPane.showMessageDialog(null, nome + " Sua media foi " + media + "\n" + st,"Media",2);
	
	
	System.exit(0);		
}

}[/code]

É isso ae cara, teu programa ficou 10…

Qualquer duvida, posta ae…

flw!!!

Filipe

juniorribeiro,
qdo vc postar codigo, coloque ele entre as tags “code” pra ficar mais clara a leitura do codigo.

falow…