public class Grupos(){
private int codigo;
private int subcod;
private String descricao;
private float total;
public Grupos(int codigo,int subcod,String descricao,float total){
this.codigo = codigo;
this.subcod = subcod;
this.descricao = descricao;
this.total = total;
}
// demais gets e sets
}
public class MontaGrupos(){
public MontaGrupos(){
List<Grupos> grupos = new ArrayList<Grupos>();
grupos.add(new Grupos(1,1,"Grupo 1",10));
grupos.add(new Grupos(1,2,"Grupo 1",15));
grupos.add(new Grupos(2,1,"Grupo 2",5));
grupos.add(new Grupos(2,3,"Grupo 2,"10));
}
}
Minha duvida é como fazer pra imiprir isto no console mesmo (System.out.println) que ficasse dessa forma
Grupo …: Grupo 1
10
15
Total Grupo 25
Grupo …: Grupo 2
5
10
Total Grupo 15
Alguem pode me ajudar a fazer esta “quebra” por grupo??
Puxa vida, não é nada que um pouco de “ifs” e umas variaveizinhas temporárias não resolvam, não? Vou pôr em pseudo-código, e veja se é isso mesmo.
variável descricao = "";
variável somatoria = 0;
variável primeiraVez = true;
repetir para cada grupo da lista:
se grupo.descricao diferente de descricao
então
se não for primeiraVez, imprimir total do grupo anterior;
imprimir cabeçalho com a descrição do novo grupo;
descricao = grupo.descricao;
somatoria = 0;
primeiraVez = false;
senão
imprimir o grupo;
somatória += grupo.total;
fim se;
enquanto não encontrar o final da lista;
Uma dica importante. É bom que o nome de uma classe esteja no singular (Grupo) e o nome de uma coleção dessa classe esteja no plural (grupos); isso ajuda na leitura de seu programa.
Você pode implementar um Comparable na sua classe Grupos que classifique por grupo. Ai depois você manda ordenar seu ArrayList. Ai depois é só fazer a iteração e ir imprimindo os elementos…
[quote=thingol]Puxa vida, não é nada que um pouco de “ifs” e umas variaveizinhas temporárias não resolvam, não? Vou pôr em pseudo-código, e veja se é isso mesmo.
variável descricao = "";
variável somatoria = 0;
variável primeiraVez = true;
repetir para cada grupo da lista:
se grupo.descricao diferente de descricao
então
se não for primeiraVez, imprimir total do grupo anterior;
imprimir cabeçalho com a descrição do novo grupo;
descricao = grupo.descricao;
somatoria = 0;
primeiraVez = false;
senão
imprimir o grupo;
somatória += grupo.total;
fim se;
enquanto não encontrar o final da lista;
Uma dica importante. É bom que o nome de uma classe esteja no singular (Grupo) e o nome de uma coleção dessa classe esteja no plural (grupos); isso ajuda na leitura de seu programa. [/quote]
Hum, é que só estava comentando que pseudo-código é uma forma de descrever um algoritmo e que você poderia usá-lo para implementar em qualquer linguagem. Para não ficar muito longe do mundo Java, a pessoa poderia programar diretamente nos bytecodes gerados pelo compilador; entre os quais se listam:
invokestatic - serve para chamar métodos estáticos;
invokevirtual - serve para chamar métodos de instância;
invokespecial - serve para chamar alguns métodos especialmente, como os construtores e o “super”.
Vou dar um exemplo de por que isso é necessário. Digamos que você tenha as seguintes classes:
class Pessoa { public String getNome() { return "Maria"; } }
class Criança extends Pessoa { public String getNome() { return super() + "zinha"; }
Quando você chamar o método getNome da classe Criança, ele tem de chamar o método getNome da classe Pessoa (através da palavra-chave especial “super”. ) Isso é compilado em Java mais ou menos como:
invokespecial Pessoa.getNome; // é o que o "super" faz
Ele não pode simplesmente chamar o método getNome() sem especificar de que classe é, porque senão teríamos uma recursão infinita (já que em vez de chamar o getNome de Pessoa iria chamar o getNome de Criança.)