Percorrer uma Array

18 respostas
A

è 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?

18 Respostas

otaviojava

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

P

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.

fernandopaiva

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:

otaviojava

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 }

A

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

}

fernandopaiva

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…

otaviojava
public boolean isReprovadoPorFaltas() {
    
    int contTrue=0;
    for(boolean b:presenca){
    if(b){
    contTrue++;
    }
    }
    if(contTrue>=8){
    //aprovado
    }
else{
//reprovado
}
  }
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.

Rafael_Mesquita_Mour

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

A

Ae deu certo aqui, poxa Brigadao mesmo.

até a proxima :slight_smile:

A

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.

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

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

Brigado

otaviojava

Anhaya:
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.

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

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

Brigado

É 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.

P

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

Rafael_Mesquita_Mour

Anhaya:
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.

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

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

Brigado

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.

otaviojava

Isso

A

Entendi. |Brigadao

A

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;

}
}

otaviojava

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

}</blockquote>

você simplismente substitui por isso:
for (boolean b: presenca){ 

if (b== true){ 

contTrue++; //adiciona 1 a variável contTrue; 
} 
}
Criado 13 de janeiro de 2011
Ultima resposta 13 de jan. de 2011
Respostas 18
Participantes 5