-Bom pessoal!
-Eu sou iniciante em JAVA e estou tentando fazer um programinha que tenta inserir em um Array com 20 posições do tipo objeto que no caso é da classe Mercadoria e para controlar quando entram novos produtos no Array eu uso um loop para isso, mas está dando um erro que parece ser de ponteiro na linha 86 do meu código (como mostrado logo abaixo com um comentário ao lado), então fiquei na dúvida se é o valor do contador que estou usando para percorrer o Array ou se é na hora que eu estou inicializando o objeto. Mas a mensagem de erro que está aparecendo é a seguinte :
contado0quantos1produto id16
O Funcionário DOIS tentou retirar 44 itens, mas a quantidade de 4 itens do produto 16 era insuficiente!
Exception in thread "UM" Exception in thread "TRES" java.lang.ArrayIndexOutOfBoundsException: 20
at Mercadoria.setComprar_reposicao(Comercio.java:90)[color=red] [/color]
at Comercio.run(Comercio.java:31)
java.lang.ArrayIndexOutOfBoundsException: 20
at Mercadoria.setComprar_reposicao(Comercio.java:90)
at Comercio.run(Comercio.java:31)
-Se alguém tiver alguma idéia por favor me ajudem!
-Desde já agradeço por sua atenção!
public class Comercio extends Thread{
int idcliente;
private static Mercadoria item = new Mercadoria();//Instância item do objeto produto que é definido como uma constante
public Comercio(String nome,int cliente)
{
super(nome); //Nome da superclasse construtura
this.idcliente=cliente;// identificação do cliente
}
public void run()
{
int identificador,quantidade,venda;
double valor;
quantidade=(int) (Math.random()*100);
identificador=(int) (Math.random()*20);
valor=(double) (Math.random()*100);
venda=(int) (Math.random()*100);
item.setComprar_reposicao(identificador, quantidade, valor);
item.Retirar(identificador,venda);
}
public static void main(String[] args) {
Comercio funcionario1= new Comercio("UM",1);
Comercio funcionario2= new Comercio("DOIS",2);
Comercio funcionario3= new Comercio("TRES",3);
funcionario1.start();
funcionario2.start();
funcionario3.start();
}
}
/* Fim da classe comercio*/
class Mercadoria
{
int produto_id;
private int quantidade;
private double valor;
private double lucro;
int quantos;
double numero;
private Mercadoria produto[]=new Mercadoria[20];
public Mercadoria()
{
this.quantos=0;
}
public synchronized void setComprar_reposicao(int id,int quant,double preco)
{
int contador=0,status=0,pos=0;
if(quantos==0)
{
produto[0]=new Mercadoria();
produto[0].produto_id=id;
produto[0].quantidade=quant;
produto[0].valor=preco;
this.quantos=quantos+1;
System.out.println("contado"+contador+"quantos"+quantos+"produto id"+produto[0].produto_id);
}
else if(quantos>0)
{
while(status==0 || contador<quantos)
{
produto[contador]=new Mercadoria(); // O erro ocorre aqui!!!!!
if(produto[contador].produto_id==id)
{
produto[contador].quantidade=produto[contador].quantidade+quant;
System.out.println("AA O Funcionario "+Thread.currentThread().getName()+" inseriu a quantidade de "+quant+" itens do produto "+id+" e a quantidade total em estoque deste produto agora é de "+produto[contador].quantidade);
status=1;
pos=contador+1;
}
else
contador++;
}
if(status==0)
{
produto[contador]=new Mercadoria();
produto[contador].produto_id=id;
produto[contador].quantidade=produto[contador].quantidade+quant;
produto[contador].valor=preco;
System.out.println(" AAA O Funcionario "+Thread.currentThread().getName()+" inseriu a quantidade de "+quant+" itens do produto "+id+" e a quantidade total em estoque deste produto agora é de "+produto[contador].quantidade);
this.quantos=quantos+1;
}
}
}
public synchronized void Retirar(int id,int quant)
{
int cont=0;
if(quantos>0)
{
while(cont< quantos)
{
if(id==produto[cont].produto_id)
{
if(quant>produto[cont].quantidade)
{
System.out.println("O Funcionário "+Thread.currentThread().getName()+" tentou retirar "+quant+" itens, mas a quantidade de "+produto[cont].quantidade+" itens do produto "+produto[cont].produto_id+" era insuficiente!");
}
else
{
produto[cont].quantidade=produto[cont].quantidade-quant;
System.out.println("O Funcionário "+Thread.currentThread().getName()+" vendeu "+quant+" itens do [code]produto"+produto[cont].produto_id+" , " +
" deixando uma quantidade de "+produto[cont].quantidade+" itens.");
setFechar_caixa(quant,produto[cont].valor);
}
}
cont++;
}
}
else
System.out.println("O Funcionário "+Thread.currentThread().getName()+" tentou retirar "+quant+" itens do produto "+produto[cont].produto_id+",mas não há nenhum tipo de produto cadastrador ainda!");
}
public synchronized void setFechar_caixa(int quant,double preco)
{
numero=quant*preco;
this.lucro=lucro+numero;
System.out.println("O valor do caixa é:"+lucro);
}
}