Sou iniciante em programação, gostaria de saber como organizar um vetor de String, imprimindo na tela os elementos já agrupados, por exemplo, tenho um vetor de String com 5 posições:
Estou tentando criar um program de controle de gastos; a aplicação deverá ter a opção de escolha do tipo de gatos(remédio, roupa, etc), a data do gasto e a forma de pagamento. Ele deve ter a opção de visualizar o total de gasto efetuado no mês, agrupados por tipo:
1º criei meu objeto:
public class Despesa {
private String tipo;
private String data;
private String formaPagamento;
private float valor;
public Despesa(String tipo, String data, String formaPagamento, float valor) {
this.tipo = tipo;
this.data = data;
this.formaPagamento = formaPagamento;
this.valor = valor;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public String getFormaPagamento() {
return formaPagamento;
}
public void setFormaPagamento(String formaPagamento) {
this.formaPagamento = formaPagamento;
}
public float getValor() {
return valor;
}
public void setValor(float valor) {
this.valor = valor;
}
}
2º meu controle do objeto:
public class ControleDespesa {
private Despesa despesa[];
private int indice;
public ControleDespesa() {
despesa = new Despesa[100];
indice = 0;
}
public boolean cadastrarDespesa(String tipo, String data,
String formaPagamento, float valor) {
if (indice < 100) {
despesa[indice] = new Despesa(tipo, data, formaPagamento, valor);
indice++;
return true;
} else {
return false;
}
}
public void exibirGastoMensal() {
if (indice != 0) {
for (int i = 0; i < indice; i++) {
for (int j = 0; j < indice; j++) {
if (despesa[i].getTipo().equalsIgnoreCase(
despesa[j].getTipo())) {
System.out.println("Data: " + despesa[j].getData());
System.out.println("Tipo de gasto: "
+ despesa[j].getTipo());
System.out.println("Forma de pagamento: "
+ despesa[j].getFormaPagamento());
System.out.println("Valor: " + despesa[j].getValor());
}
}
}
} else {
System.out.println("Nenhuma despesa cadastrada!");
}
}
}
.Meu problema está na visualização dos gastos por tipo
Se vc quer imprimir as despesas por tipo, é necessário que vc defina qual tipo vc quer exibir.
Exemplo:
public void exibirGastoMensal(String tipo){
if (indice > 0){ //se o indice for maior que 0, existirá alguma despesa cadastrada.
for (int i = 0; i < indice; i++){
if (despesa[i].equalsIgnoreCase(tipo)){ //verifico se a despesa na posição 'i' é igual ao tipo passado pelo parâmetro.
//imprimo os dados.
System.out.println("Data: " + despesa[i].getData());
System.out.println("Tipo de gasto: " + tipo);
System.out.println("Forma de pagamento: " + despesa[i].getFormaPagamento());
System.out.println("Valor: R$ " + despesa[i].getValor());
}
}
} else {
System.out.println("Nenhuma despesa cadastrada.");
}
}
Outra forma, é assim:
public void exibirGastoMensal(String tipo){
if (indice > 0){ //se o indice for maior que 0, existirá alguma despesa cadastrada.
StringBuilder dados = new StringBuilder();
for (int i = 0; i < indice; i++){
if (despesa[i].equalsIgnoreCase(tipo)){ //verifico se a despesa na posição 'i' é igual ao tipo passado pelo parâmetro.
//Insiro os dados em uma StringBuilder
dados.append("Data: ").append(despesa[i].getData()).append("\n");
dados.append("Tipo de gasto: ").append(tipo).append("\n");
dados.append("Forma de pagamento: ").append(despesa[i].getFormaPagamento()).append("\n");
dados.append("Valor: R$").append(despesa[i].getValor()).append("\n");
}
}
//Faço a verificação do tamanho da minha StringBuilder, se for maior que 0, irá imprimir os dados cadastrados
//Senao, mensagem informativa de que não há despesas cadastradas com o tipo informado pelo parâmetro.
System.out.println(dados.length() > 0 ? dados.toString():"Não existem despesas desse tipo");
}else {
System.out.println("Não existem despesas cadastradas.");
}
}
EDIT
Acabei de ver que interpretei a pergunta de forma diferente. Ahaha.