Duvidas como criar regras!

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;
}
}

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:

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

this.nome = nome;
}[/code]

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

muito obrigado!

na proxima divida utilizarei a tag code:

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

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

Segue um método bem rudimentar:

[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 != '[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;
    }
    
}[/code]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 == '[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;
    }
    
}[/code]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 != '[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;
    }
    
}[/code]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.

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.

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.

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:

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; }

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

this.nome = nome;
}
[/code]

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

E pode ficar na mesma classe.