Duvidas como criar regras!

10 respostas
S

O nome deve conter pelo menos dois caracteres e não deve possuir números;
A matricula deve ser constituida de 9 digitos apenas.

Segue a class que estou criando.

public class Aluno {

private String nome;

private int matricula;

private float nota1;

private float nota2;

private float nota3;

private int peso1;

private int peso2;

private int peso3;
public Aluno(String nome, int matricula, float nota1, float nota2, float nota3, int peso1, int peso2, int peso3) {

this.nome = nome;

this.matricula = matricula;

this.nota1 = nota1;

this.nota2 = nota2;

this.nota3 = nota3;

this.peso1 = peso1;

this.peso2 = peso2;

this.peso3 = peso3;

}
public String getNome() {

return nome;

}

public void setNome(String nome) {
this.nome = nome;

}

public int getMatricula() {

return matricula;

}
public void setMatricula(int matricula) {

this.matricula = matricula;

}
public float getNota1() {

return nota1;

}
public void setNota1(float nota1) {

this.nota1 = nota1;

}
public float getNota2() {

return nota2;

}
public void setNota2(float nota2) {

this.nota2 = nota2;

}
public float getNota3() {

return nota3;

}
public void setNota3(float nota3) {

this.nota3 = nota3;

}
public int getPeso1() {

return peso1;

}
public void setPeso1(int peso1) {

this.peso1 = peso1;

}
public int getPeso2() {

return peso2;

}
public void setPeso2(int peso2) {

this.peso2 = peso2;

}
public int getPeso3() {

return peso3;

}
public void setPeso3(int peso3) {

this.peso3 = peso3;

}

}

10 Respostas

ViniGodoy

Oi, quando for postar códigos, use a tag code:
[code]
Seu código aqui
[/code]

Você pode criar regras através de exceptions, por exemplo:

public void setNome(String nome) {
    if (nome.length() < 2) 
       throw new IllegalArgumentException("O nome deve ter pelo menos 2 caracteres!");

   this.nome = nome;
}

O mesmo tratamento deverá ser feito na sua interface gráfica.

S

muito obrigado!

na proxima divida utilizarei a tag code:

S

e a regra para não deixar digitar numeros no nome, da para colocar no mesmo if?

O nome deve conter pelo menos dois caracteres e não deve possuir números;

A matricula deve ser constituida de 9 digitos apenas. OK

S

na matricula não da para usar o if do nome pois ela é int.

F

Segue um método bem rudimentar:

static    BufferedReader linha = new BufferedReader(new InputStreamReader(System.in));

 static String readMoreThanTwo(){
	    try{
		String entrada = "";
		int letraint;
		int count =0;
		boolean letras = true;

		while(count<=2){
		    letraint=0;
		    
		    while( letraint != '[code] static    BufferedReader linha = new BufferedReader(new InputStreamReader(System.in));

 static String readMoreThanTwo(){
	    try{
		String entrada = "";
		int letraint;
		int count =0;
		boolean letras = true;

		while(count<=2){
		    letraint=0;
		    
		    while( letraint != '\012'){
		    letraint=linha.read();
		    count++;
		   
		    
	if(((int)'a'<=letraint)&&(letraint <=  (int) 'z')||( 'A' <= letraint && letraint <= 'Z')|| letraint ==' '||
          letraint== 'â' || letraint == 'ã') // Testa se eh uma letra. Aqui é necessário inserir caracteres acentuados a mão. Pus só alguns
	    entrada = entrada + (char) letraint;   //carrega a string
		    else{ 
			if(letraint == '\012')
				;
			   else{
			System.out.println("Aceitamos apenas letras"); // Não eh letra
			count=0;                                         // Reinicia a contagem
			letras=false;                                    // Não eh letra (sera usado abaixo)
			entrada="";                                        // Reinicia a string
			while( letraint != '\012')                       // Esvazia  a Stream
			    letraint=linha.read();
			break;                                          // Sai do ciclo
			   }
		    }
		    }   

		
		    if(count<=2){                                            // Tem menos que dois char?
			if(letras)                                           // Se tem só letras avisa que sao poucas
		    System.err.println("Poucas letras, tente novamente");
		    letras = true;
		    letraint=0;
		    count=0;                                                  //Renova contagem
		}
		}		
		
		return entrada;
	    }catch(IOException e){
		System.err.println(e);
		return null;
	    }
	    
    }
12'){ letraint=linha.read(); count++; if(((int)'a'<=letraint)&&(letraint <= (int) 'z')||( 'A' <= letraint && letraint <= 'Z')|| letraint ==' '|| letraint== 'â' || letraint == 'ã') // Testa se eh uma letra. Aqui é necessário inserir caracteres acentuados a mão. Pus só alguns entrada = entrada + (char) letraint; //carrega a string else{ if(letraint == '
static    BufferedReader linha = new BufferedReader(new InputStreamReader(System.in));

 static String readMoreThanTwo(){
	    try{
		String entrada = "";
		int letraint;
		int count =0;
		boolean letras = true;

		while(count<=2){
		    letraint=0;
		    
		    while( letraint != '\012'){
		    letraint=linha.read();
		    count++;
		   
		    
	if(((int)'a'<=letraint)&&(letraint <=  (int) 'z')||( 'A' <= letraint && letraint <= 'Z')|| letraint ==' '||
          letraint== 'â' || letraint == 'ã') // Testa se eh uma letra. Aqui é necessário inserir caracteres acentuados a mão. Pus só alguns
	    entrada = entrada + (char) letraint;   //carrega a string
		    else{ 
			if(letraint == '\012')
				;
			   else{
			System.out.println("Aceitamos apenas letras"); // Não eh letra
			count=0;                                         // Reinicia a contagem
			letras=false;                                    // Não eh letra (sera usado abaixo)
			entrada="";                                        // Reinicia a string
			while( letraint != '\012')                       // Esvazia  a Stream
			    letraint=linha.read();
			break;                                          // Sai do ciclo
			   }
		    }
		    }   

		
		    if(count<=2){                                            // Tem menos que dois char?
			if(letras)                                           // Se tem só letras avisa que sao poucas
		    System.err.println("Poucas letras, tente novamente");
		    letras = true;
		    letraint=0;
		    count=0;                                                  //Renova contagem
		}
		}		
		
		return entrada;
	    }catch(IOException e){
		System.err.println(e);
		return null;
	    }
	    
    }
12') ; else{ System.out.println("Aceitamos apenas letras"); // Não eh letra count=0; // Reinicia a contagem letras=false; // Não eh letra (sera usado abaixo) entrada=""; // Reinicia a string while( letraint != '
static    BufferedReader linha = new BufferedReader(new InputStreamReader(System.in));

 static String readMoreThanTwo(){
	    try{
		String entrada = "";
		int letraint;
		int count =0;
		boolean letras = true;

		while(count<=2){
		    letraint=0;
		    
		    while( letraint != '\012'){
		    letraint=linha.read();
		    count++;
		   
		    
	if(((int)'a'<=letraint)&&(letraint <=  (int) 'z')||( 'A' <= letraint && letraint <= 'Z')|| letraint ==' '||
          letraint== 'â' || letraint == 'ã') // Testa se eh uma letra. Aqui é necessário inserir caracteres acentuados a mão. Pus só alguns
	    entrada = entrada + (char) letraint;   //carrega a string
		    else{ 
			if(letraint == '\012')
				;
			   else{
			System.out.println("Aceitamos apenas letras"); // Não eh letra
			count=0;                                         // Reinicia a contagem
			letras=false;                                    // Não eh letra (sera usado abaixo)
			entrada="";                                        // Reinicia a string
			while( letraint != '\012')                       // Esvazia  a Stream
			    letraint=linha.read();
			break;                                          // Sai do ciclo
			   }
		    }
		    }   

		
		    if(count<=2){                                            // Tem menos que dois char?
			if(letras)                                           // Se tem só letras avisa que sao poucas
		    System.err.println("Poucas letras, tente novamente");
		    letras = true;
		    letraint=0;
		    count=0;                                                  //Renova contagem
		}
		}		
		
		return entrada;
	    }catch(IOException e){
		System.err.println(e);
		return null;
	    }
	    
    }
12') // Esvazia a Stream letraint=linha.read(); break; // Sai do ciclo } } }

if(count<=2){ // Tem menos que dois char?
if(letras) // Se tem só letras avisa que sao poucas
System.err.println("Poucas letras, tente novamente");
letras = true;
letraint=0;
count=0; //Renova contagem
}
}

return entrada;
}catch(IOException e){
System.err.println(e);
return null;
}

}[/code]
Como eu disse, é bem rudimentar, mas parece funcionar. Provavelmente há classes mais apropriadas para se trabalhar com isto. Talvez scanner ou tokenizer, não sei.

ViniGodoy

Essa é a função que verifica se há algum número na String.

public bool contemNumeros(String str) { for (char ch : str.toCharArray()) { if (Character.isNumeric(ch)) return true; } } return false; }

Também é possível fazer usando expressão regular.

F

Olá, eu não encontrei o método String.getChars(String ), mas assim:

public static boolean temNumeros(String str){ for(char ch : str.toCharArray()){ if(Character.isDigit(ch)) return true; } return false; }
funcionou. Apenas uma pequena mudança no nome do método. Talvez isto se deva a versão usada do java, não sei.

ViniGodoy

Acho que eu que confundi mesmo. Fiz o código de cabeça e como programo em 3 linguagens, as vezes embaralho um pouco as coisas. Mas a idéia tava lá. :slight_smile:

S

blz, mas aonde eu vou usar esse codigo, preciso colocar ele junto com o dos caracteres (public void setNome(String nome) ?

public static boolean  temNumeros(String str){   
    for(char ch : str.toCharArray()){   
        if(Character.isDigit(ch))   
        return true;   
    }     
    return false;   
    }
public void setNome(String nome) {   
    if (nome.length() < 2)   
       throw new IllegalArgumentException("O nome deve ter pelo menos 2 caracteres!");   
  
   this.nome = nome;   
}
ViniGodoy

Você vai fazer outro if, igual a esse feito para o nome.

E pode ficar na mesma classe.

Criado 18 de maio de 2010
Ultima resposta 19 de mai. de 2010
Respostas 10
Participantes 3