[RESOLVIDO]duvida em arrays, me ajuda urgente

13 respostas
D

estou fazendo este exercicio para fins de estudo pois tenho prova amanha sobre isso

3. a) Crie uma classe Produto com dois atributos: código e preço, e os métodos:
- exibeProduto, que mostra o produto na tela
- getCodigo e getPreco
b) Programe a classe Estoque com um atributo que é um array de objetos produto. O
construtor recebe o tamanho do array para inicializá-lo. Programe os métodos:
- insereProdutos, que preenche o array, obtendo do teclado os dados dos vários
produtos
- exibeEstoque , que mostra na tela todos os produtos do estoque
- produtoMaisCaro, que retorna o objeto produto que tem o preço mais alto
- achaProduto, que recebe um código de produto e retorna o produto se ele estiver no
estoque ou null, se não estiver.
c) Crie uma classe TestaEstoque com um método main que instancia um objeto
Estoque, insere
produtos nele, mostra-o na tela, imprime os dados do produto mais caro e lê do
teclado um código de produto e diz se ele está ou não no estoque.

public class Estoque
{
    private Produto[] produtos;

    
    public Estoque(int quantidade)  
    {  
        produtos = new Produto[quantidade];
        
    } 

    public Produto[] getProduto()
    {
        return produtos;
    }
   
    public void insereProdutos()
    {
        Teclado t = new Teclado();
        for(int i=0;i<produtos.length;i++)
        {
          produtos[i] = new Produto(t.leInt("CODIGO:"),t.leDouble("Preco"));
          
        }
        
    }

    public void exibeEstoque()
    {
      for(int i=0;i<produtos.length;i++)
      if(produtos[i] != null)
      System.out.println("Produto:"+""+i+"Código:"+produtos[i].getCodigo()+""+"Valor:"+produtos[i].getPreco());   
      else System.out.println("ESTOQUE VAZIO");
    }
    

    public void produtoMaisCaro()
    {
             
       for(int i=0;i<produtos.length;i++)
       {// se preco do produto contido no array maior que 0 substitui//
           Produto mc = null;
           if(produtos[i].getPreco() > mc.getPreco())
          System.out.println(produtos[i]);
       }
       
    }     
     public void achaProduto(int codigo)
     {
         for(int i=0;i<produtos.length;i++)
         {
             if(produtos[i].getCodigo() == codigo)
             {
                System.out.println("Produto:"+"Codigo:"+produtos[i].getCodigo()+""+"Preco:  "+produtos[i].getPreco());
             }
             else

              System.out.println("PRODUTO NAO ENCONTRADO");
         
        }
     }

  
}

minha duvida esta em como usar um metodo para retornar um objeto com preco mais alto que esta contido no array
esta parte

- produtoMaisCaro, que retorna o objeto produto que tem o preço mais alto

me ajudem por favor
a classe de teste sei fazer
estou em duvida so neste metodo

13 Respostas

celso.martins

Cara, sua dúvida está quase no formato mais apreciado pelos frequentadores deste fórum. Só faltou um detalhe: a urgência é sua, não nossa. Não é bem visto ficar mencionando urgência em post e, principalmente, em título.

A dúvida no seu método pode ser resolvida com o método compareTo().

Aqui a busca correta no google: http://www.google.com.br/search?q=java+compareTo&ie=utf-8&oe=utf-8&aq=t&rlz=1R1GGGL_pt-BR___BR332&client=firefox-a

Se não quiser usar este método (o professor ainda não tiver ensinado ou achou muito complicado), ainda pode utilizar uma variável de controle para definir se o preço que está sendo testado no for é maior ou menor do que os já testados.

Pelo que você já andou na solução, creio que só mostrar esses caminhos vai ser suficiente para você arrebentar na prova. :wink:

Parabéns por, pelo menos, ter tentado alguma coisa. O que tem de gente por aqui que cola o enunciado e pede a solução, como diz a minha mãe, não está no gibi. :lol:

Boa sorte, e qualquer coisa, estamos aí.

T

Aonde que vc ta substituindo??? Além do que de cara já vai dar NullPointerException…

Isso tá me parecendo que vc pegou de alguem esse código e a pessoa não terminou e só falta esse método, mas blz…

Minha Dúvida::: sua dúvida nesse método é em relação a código Java ou a lógica? vc sabe achar o produto que tem maior valor???

É como disse o celso.martins…não está no gibi, espero não ser seu caso…

D

sim a logica eu sei, foi eu mesmo que fiz o codigo

nao sei e a sintaxe ja me falaram para usar compareTo
vi em aula ja mas nao me lembro como funciona

D

sim esta dando esse
NullPointerException

pode me explicar o pq?

ViniGodoy

Pq numa linha você faz:
Produto mc = null;

e na debaixo, dentro do if, você faz:
mc.getPreco()

Se mc é null, como seria possível chamar o método getPreco()? Resposta: Não é possível, daí a NullPointerException.

T

pode usar o compareTo, mas como vc deve ser iniciante e a prova deve ser logo, você pode fazer método tradicional mesmo, usando sua lógica, algo como ter uma variável máximo e comparando com todos os valores dos produtos (dentro do FOR) e armazenando o índice do maior valor de Produto(iteração do FOR)…qdo o loop terminar, vocÊ terá o prodto de maior valor !!!

D

tipo se eu fizer

double mc = 0;

for(int i=0;produtos.length;i++)

{

if(produto[i].getPreco() > mc)

mc = produto[i].getPreco();

}

ai vai retornar o maior preco,

o que eu preciso e retornar o objeto inteiro

D

assim que eu terminar posto o exercicio com a soluçao aqui como fiz nos outros topicos,
agradeco pelas respostas

T

então faça::

public Produto getProdutoMaisCaro(){
   int indice;
   double mc = 0;
   
   for(int i=0;produtos.length;i++)
   {
      if(produto[i].getPreco() > mc){
          mc = produto[i].getPreco();
          indice = i;
      }
   }
   
   return produtos[indice];
}

Dá pra melhorar esse código, mas a idéia é essa…flw…

D

Obrigado

vou implementar

ViniGodoy
public Produto localizarDeMaiorPreco(Produto[] produtos) {
    if (produtos.length == 0)
        return null;

    Produto maior = produtos[0];
    for (Produto produto : produtos)
        if (maior.getPreco() < produto.getPreco())
            maior = produto;         
    return maior;
}
D

Grato a todos pela ajuda

Soluçao do exercicio abaixo

/**
 * Write a description of class Produto here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Produto
{
    private int codigo;
    private double preco;
    
    public Produto(int codigo,double preco)
    {
     this.codigo = codigo;
     this.preco = preco;
    }
    
    public void exibeProduto()
    {
     System.out.println("PRODUTO"+codigo);
     System.out.println("PRECO"+preco);
    }
    
    public int getCodigo()
    {
        return codigo;
    }
    
    public double getPreco()
    {
        return preco;
    }
}
public class Estoque
{
    private Produto[] produtos;

    
    public Estoque(int quantidade)  
    {  
        produtos = new Produto[quantidade];
        
    } 

    public Produto[] getProduto()
    {
        return produtos;
    }
   
    public void insereProdutos()
    {
        Teclado t = new Teclado();
        for(int i=0;i<produtos.length;i++)
        {
          produtos[i] = new Produto(t.leInt("CODIGO:"),t.leDouble("Preco"));
          
        }
        
    }

    public void exibeEstoque()
    {
      for(int i=0;i<produtos.length;i++)
      if(produtos[i] != null)
      System.out.println("Produto:"+""+i+"Código:"+produtos[i].getCodigo()+""+"Valor:"+produtos[i].getPreco());   
      else System.out.println("ESTOQUE VAZIO");
    }
    

    public Produto produtoMaisCaro()
    {
       int indice = -1; //se iniciar o índice em 0 e o array de produtos estiver vazio, vai dar erro no return produto[indice];

       double mc = 0;// variavel local para guardar o valor mais alto
       for(int i=0;i<produtos.length;i++)
       {// se preco do produto contido no array maior que 0 substitui//
           if(produtos[i].getPreco() > mc)
           mc = produtos[i].getPreco();
           indice = i;
       }
       if(indice >= 0)
          return produtos[indice];
          
       else
       {
          return null;
       }  
       
    }
     public void achaProduto(int codigo)
     {
         for(int i=0;i<produtos.length;i++)
         {
             if(produtos[i].getCodigo() == codigo)
             {
                System.out.println("Produto:"+"Codigo:"+produtos[i].getCodigo()+""+"Preco:  "+produtos[i].getPreco());
             }
             else

              System.out.println("PRODUTO NAO ENCONTRADO");
         
        }
     }

  
}
public class TestaEstoque
{
    public static void main(String args[])
    {
        Teclado t = new Teclado();
        Estoque e = new Estoque(4);
        
        e.insereProdutos();
        e.exibeEstoque();
        e.produtoMaisCaro();
        e.achaProduto(t.leInt("INFORME O CODIGO DO PRODUTO"));
        
        
    }
}
T

A solucao do ViniGodoy é bem mais orientada a objeto, se vc entender implemente ela…a que eu propus é bem basicona, resolve, mas é estruturada…

OBS: como o post já foi resolvido, aconselho vc editar o post e no título colocar [Resolvido]…qlqer coisa estamos ae…fui !!!1

Criado 17 de junho de 2009
Ultima resposta 18 de jun. de 2009
Respostas 13
Participantes 4