Percorrer uma Array

è o seguinte, estou usando um comando assim para percorrer uma array booleana.

for(int i = 0; i < presenca.length; i++)

Porém, nao só isto que tenho que fazer, e sim retirar desta array “presenca”, quantas faltas o aluno teve.

Obs, eu tenho o esqueleto de teste que reprova o aluno. Ele esta ssim, deixem de lado a parte da nota, o que interessa é so os “trues e falses” .

    System.out.println("reprovado por nota e reprovado por presença");
    testaAprovacao(new Matricula(1, 2, 3, new boolean[] {
        true, false, false, false, true, false, true, true, true, true}))

No caso cada presença vale true, ou seja, neste caso ele teve 6 presenças, ou seja, foi reprovado, pois precisa ter presença >8, porém, como fasso para contar esses “trues” da arrays?

Tenta usar o for each: http://download.oracle.com/javase/1.5.0/docs/guide/language/foreach.html

Amigo essa sua lista presenca é um array de Matricula? se sim acho que fica assim.
Tem que percorrer a lista de Matricula para chegar na lista de presenca e só assim poder ver se está certo.
Vo usar foreach mais vc pode usar o for q está usando mesmo.

   for(Boolean i : matricula.getPresenca()){
      if(i){
         contadorDePresenca++;
      }
   }

Espero ter ajudado.

simples

crie um arraylist e va colocando os true dentro dele.

veja o exemplo.

        //pega os true
        ArrayList lista = new ArrayList();
        String[] array = {"true", "true", "true", "false", "false"};
        for(int x = 0; x < array.length; x++){
            if(array[x].equals("true")){
                lista.add(x);
            }
        }
        System.out.println(lista.size());
        //verifica o tamanho do arraylist
        if(lista.size() >= 8){
             System.out.println("aluno aprovado");
        }        

Pronto, simples de fazer :wink:

Boolean[] teste= new Boolean[] { true, false, false, false, true, false, true, true, true, true}; int contTrue=0; for(boolean b:teste){ if(b){ contTrue++; } } if(contTrue>=8){ //codigo }

Sim é uma lista de matriclula, vou coloca-la completa pra vc ver.

public class Matricula
{
// omitidos os dados do aluno e da cadeira

private float p1;
private float p2;
private float p3;
private boolean[] presenca;

public Matricula(float p1, float p2, float p3, boolean[] presenca) {
    this.p1 = p1;
    this.p2 = p2;
    this.p3 = p3;
    this.presenca = presenca;
}

public boolean isReprovadoPorFaltas() { [color=red]// É AQUI QUE EU PRECISO VERIFICAR TRUE E FALSE, SO QUE NAO SEI COMO VERIFICAR ISSO DESNTRO DA ARRAY BOOLEANA.[/color]

for(int i = 0; i < presenca.length; i++){
	if (presenca[i] !
	
}

public boolean isAprovadoPorNota() { //Aqui esta OK, eu acho
	float m1;
	float m2;
	m1 = (p1 + p2) / 2;
	m2 = (m1 + p3) / 2;
	if ( m1 >= 7 || m2>= 6 )
	{
    return true;
}
	else
	return false;
} // termina aqui o meu "OK"
public float getMediaFinal() {
	float m1;
	float m2;
	m1 = (p1 + p2) / 2;
	m2 = (m1 + p3) / 2;
	if ( m1 >= 7 ){
    return m1; // aqui estava como return -1
}
	else 
		return m2;
		}
public static void testaAprovacao(Matricula mat) {
    System.out.println("média final: " + mat.getMediaFinal());
    System.out.println("aprovado por nota: " + mat.isAprovadoPorNota());
    System.out.println("aprovado por presença: " + !mat.isReprovadoPorFaltas());
}

public static void main(String[] args) {
    
    System.out.println("aprovado por nota sem p3 e por presença");
    testaAprovacao(new Matricula(8, 9, -1, new boolean[] {
        true, true, true, true, true, true, true, true, true, true})); 
    
    System.out.println("aprovado por nota com p3 e por presença");
    testaAprovacao(new Matricula(6, 6, 6, new boolean[] {
        true, true, true, true, true, true, true, true, true, true}));
    
    System.out.println("reprovado por nota mas aprovado por presença");
    testaAprovacao(new Matricula(5, 4, 3, new boolean[] {
        true, true, true, true, true, true, true, true, true, true}));
    
    System.out.println("aprovado por nota com p3 mas reprovado por presença");
    testaAprovacao(new Matricula(6, 6, 6, new boolean[] {
        true, false, false, false, true, false, true, true, true, true}));
    
    System.out.println("reprovado por nota e reprovado por presença");
    testaAprovacao(new Matricula(1, 2, 3, new boolean[] {
        true, false, false, false, true, false, true, true, true, true}));
}

}

Da maneira como eu falei vc faz isso tranquilamente sem muitos rodeios, é só ir adicionando os true a um arraylist e depois checar o tamanho do arraylist, ja era…se tiver 3 true, vaum ta no arraylist, se tiver 70 true vaum ta no arraylist…


public boolean isReprovadoPorFaltas() {
    
    int contTrue=0;
    for(boolean b:presenca){
    if(b){
    contTrue++;
    }
    }
    if(contTrue>=8){
    //aprovado
    }
else{
//reprovado
}
  }

Repare como eu mostrei no for each vc pode percorrer qualquer tipo de iteração seja ela um array de objetos ou qualquer um colection.

Boolean[] teste= new Boolean[] { true, false, false, false, true, false, true, true, true, true}; int conTrue = 0; for(int i = 0; i < 10; i++){ if(teste[i] == true){ conTrue++; } } if(conTrue > 8){ //código }
Ta certo? ;D

Ae deu certo aqui, poxa Brigadao mesmo.

até a proxima :slight_smile:

[quote=otaviojava]Repare como eu mostrei no for each vc pode percorrer qualquer tipo de iteração seja ela um array de objetos ou qualquer um colection.
[/quote]

Só mais uma coisa, tem como me explicar essa linha do for.

 for(boolean b:presenca){  
 if(b){  
 contTrue++; 

Brigado

[quote=Anhaya][quote=otaviojava]Repare como eu mostrei no for each vc pode percorrer qualquer tipo de iteração seja ela um array de objetos ou qualquer um colection.
[/quote]

Só mais uma coisa, tem como me explicar essa linha do for.

 for(boolean b:presenca){  
 if(b){  
 contTrue++; 

Brigado[/quote]

É bem semelhante a forma que vc fez só que a interação é automática, feita por debaixo dos panos.
A cada interação o b será um valor da lista ou do array.

para cada valor booleano na lista ele vai atribuir pro b e vai rodar 1 vez dentro do laço.

[quote=Anhaya][quote=otaviojava]Repare como eu mostrei no for each vc pode percorrer qualquer tipo de iteração seja ela um array de objetos ou qualquer um colection.
[/quote]

Só mais uma coisa, tem como me explicar essa linha do for.

 for(boolean b:presenca){  
 if(b){  
 contTrue++; 

Brigado[/quote]

for(boolean b:presenca){//Para cada elemento de presença, insira o proximo elemento em b if(b){ //provavelmente deve ser 'se b for true' contTrue++;//adiciona 1 a variável contTrue;

Corrijam-me se estiver errado.

Isso

Entendi. |Brigadao

Consegui deixar de um jeito que eu entenda mais claramente, é que nao aprendi o meotodo do for-each ainda.

ficou assim, Brigado gente. até a proxima.

public boolean isReprovadoPorFaltas() {
 int contTrue=0;  
												
 for (int i = 0; i < presenca.length; i++){
												
 if (presenca[i]== true){

     contTrue++; //adiciona 1 a variável contTrue; 

}
}
if(contTrue>=8){
//aprovado
return false;
}
else{
//reprovado
return true;

}
}

[quote=Anhaya]Consegui deixar de um jeito que eu entenda mais claramente, é que nao aprendi o meotodo do for-each ainda.

ficou assim, Brigado gente. até a proxima.

public boolean isReprovadoPorFaltas() {
 int contTrue=0;  
												
 for (int i = 0; i < presenca.length; i++){
												
 if (presenca[i]== true){

     contTrue++; //adiciona 1 a variável contTrue; 

}
}
if(contTrue>=8){
//aprovado
return false;
}
else{
//reprovado
return true;

}
}[/quote]
você simplismente substitui por isso:

for (boolean b: presenca){ 

if (b== true){ 

contTrue++; //adiciona 1 a variável contTrue; 
} 
}