Java! Dúvida ao organizar Strings

5 respostas
M

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:

0 - Arvore
1 - Bola
2 - Casa
3 - Arvore
4 - Casa

Na hora de imprimir:

Arvore,Arvore,Bola,Casa, Casa

Desde já, agradeço.

5 Respostas

K

Você ta falando de criar um array e definir a posição dessas parada ai?

M

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

J

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.

M

Valeu amigo! Muito obrigado pela explicação, vejo q antes de tudo é preciso bem compreender a questão. :slight_smile:

JeffersonFelix

Pelo que entendi, você quer ordenar seu array, é isso?

Pode utilizar vários tipos de algoritmos diferentes, mas o mais simples é o insertion sort. Algo assim:

int temp;
for (int i = 0; i < array.length - 1; i++) {
	for (int j = i + 1; j < array.lenght; j++) {
		if (array[j] > array[i]) {
			temp = array[i];
			array[j + 1] = array[j];
			array[j] = temp;
		}
	}
}

É só adaptar ao seu código.

Criado 5 de outubro de 2012
Ultima resposta 6 de out. de 2012
Respostas 5
Participantes 4