Variavel não inicializada?

5 respostas
H

Salve pessoal!
Sou iniciante em Java e estou com um pequeno problema em relação a um script ( ? ) que estou desenvolvendo...
O erro retornado ao compilar o .java :

hlegius@Jeremias:~/java/estudos/control$ javac vendas.java
vendas.java:41: variable produtos might not have been initialized
for (int i=0;i<produtos.length;i++){
^
vendas.java:42: variable totalItens might not have been initialized
totalItens = totalItens + produtos[i] + "\n";
^
vendas.java:43: variable valorTotal might not have been initialized
valorTotal = valorTotal + pdrValor[i] + "\n";
^
vendas.java:43: variable pdrValor might not have been initialized
valorTotal = valorTotal + pdrValor[i] + "\n";
^
4 errors

Segue a fonte do que estou tentando fazer:

import javax.swing.JOptionPane;

public class vendas{
		public static void main(String[] args){
				String produtos[];
				String pdrValor[];
				int opt = 0;
				
		String nomeVendedor = JOptionPane.showInputDialog(
								"Olá! Antes de mais nada, como se chama nosso vendedor?"
							);
		String nomeCli      = JOptionPane.showInputDialog(
								"Salve " + nomeVendedor + "!\n Agora como se chama o cliente?"
							);
			/* Será nossa referencia para instanciar a matriz produtos[] */
			int conta = 1;
		/* Enquanto não for passado um valor para o sistema ele não parará! */
			while (opt != JOptionPane.YES_OPTION){
				produtos = new String[conta];
				pdrValor = new String[conta];
				produtos[conta] = JOptionPane.showInputDialog(
									"Qual o nome do produto?"
								);
				pdrValor[conta] = JOptionPane.showInputDialog(
									"Qual o valor desse produto em R$"
								);
				opt = JOptionPane.showConfirmDialog(
									null,
									"Há mais produtos?",
									"Controle",
									JOptionPane.YES_NO_OPTION,
									JOptionPane.QUESTION_MESSAGE
								);
                               conta++;
			}
			JOptionPane.showMessageDialog(
								null,
								"Preparando-se para retornar os itens..."
						);
			String valorTotal;
			String totalItens;
			for (int i=0;i<produtos.length;i++){
				totalItens = totalItens + produtos[i] + "\n";
				valorTotal      = valorTotal + pdrValor[i] + "\n";
			}
			JOptionPane.showMessageDialog(
								null,
								"Os produtos foram: \n Totalizando: R$ " 
					   );	
		}
}

Estou tentando fazer um programa que resgate valores e os armazene em arrays e no fim corra por toda ela e una todos os valores dela dentro de uma String para retornar ao vídeo. Se alguém tiver algo a comentar sobre o programa eu aceito tbm :P
Desde já agradesço a força!

até... :)

5 Respostas

M

variáveis locais não passam valores default, então você terá que inicializar suas variáveis String valorTotal =null; String totalItens = null; E a matriz tem valor fixo, você não pode criar novos campos para ela, então defina o tamanho dela fora do while, produtos = new String[cont]; pdrValor = new String[cont]; já passando o valor pra ela, ou use um ArrayList ou vector, assim você não precisa espeficicar o numero de itens. Um exemplo aqui…
http://www.mundooo.com.br/php/modules.php?name=News&file=article&sid=412

H

blz cara deu certo inicialmente,
Mas tipo
Se eu definir tipo

produtos = new String[15]; pdrValor = new String[15];
E eu colocar somente 10 “produtos” o resto será retornado como null no final, pois não tem nada para ele entende…

E outra sempre no primeiro elemento da matriz [0] retorna o null mais o valor digitado, acho que é por causa do

String valorTotal = null; String totalItens = null;
Teria como eu contornar isso ?
Vlw pela força cara!

até… :slight_smile:

FieroddPJ

veja c vc nao esta atribuindo o null junto com o valor da string
c vc fizer array[0]=array[0]+“alguma coisa”
entao ele retorna “nullalgumacoisa”

PS: como os campos são tipo String vc pode simplesmente inicializar elas assim:

totalItens="";

valorTotal="";

aqui vc está inicializando elas como sendo strings vazias, elas nem mesmo contam como espaço

agora pra vc nao imprimir os null dos campos não prenchidos do array, vc pode verificar os campos, {if array[x]!=null -> ‘imprime’}
da uma estudada na api pois creio q vc nao precise fazer isso obrigatoriamente

Boa sorte!!!

H

Opa valeu galera!
bem, não sei o que seria API ( se alguém poder me dar uma pequena definição :smiley: ) mas resolvi assim:

for (int i=0;i<produtos.length;i++){ if(produtos[i] != null){ totalItens = totalItens + produtos[i] + "\n"; valorTotal = valorTotal + pdrValor[i]; } }
Agora tá blezinha!
Usei um eskema para converter string para double e formatei o valor retornado para 0.00 ficou XD
Mais uma vez brigadão pela força!

até… :slight_smile:

D

E ae cara, blz?!
Você já pensou em utilizar ArrayList ou Vector?!
de uma pesquisada na documentação!
http://java.sun.com/j2se/1.5.0/docs/api/ ~

Falou!

Criado 14 de agosto de 2005
Ultima resposta 15 de ago. de 2005
Respostas 5
Participantes 4