2

Preciso colocar 5 pesos em ordem do menor para o maior. Definindo antes os números por exemplo: int vet[] = {3,4,2,8,7,1}; ele roda certinho, mas eu preciso fazer dessa maneira: int vet[] = new int [5]; dessa maneira ele esta pegando só 3 números como esta mostrando na imagem. segue o código:

Código

int vet[] = new int [5];

int aux;

boolean controle;

for(int i = 0; i < vet.length; i++ ) {

    vet[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite o peso: "));

    controle = true;

    for(int j = 0; j < (vet.length -1); j++) {

        if(vet[j] > vet[j+1]) {

            aux = vet[j];
            vet[j] = vet[j + 1];
            vet[j + 1] = aux;
            controle = false;
        }

    }

    if(controle) {

        break;

    }

}
for(int i = 0; i < vet.length; i++) {
System.out.println(vet[i] + "");

}
1
  • 1
    Não seria melhor dividir isso em duas partes, onde a primeira lê os valores e os coloca no array e a segunda os ordena? Commented 13/08/2017 às 5:04

2 Respostas 2

1

Bom eu separei seu For que completa o Vetor do For que organiza já que você precisa tem um valor para troca quando ele faz essa leitura vet[j] > vet[j+1]) você tem um valor no j mas j + 1 não, você tem zero inicio

  public static void main(String args[]) {

        int vet[] = new int [5];

        int aux;

        for(int i = 0; i < vet.length; i++ )
            vet[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite o peso: ",null)); 


    for (int i = 0; i < vet.length; i++)
        {
         for(int j = 0; j < (vet.length); j++) {
         if(vet[i] < vet[j]) {

             aux = vet[i];
             vet[i] = vet[j];
             vet[j] = aux;
         }

      }  
   }
    for(int i = 0; i < vet.length; i++) 
        System.out.println(vet[i] + "");


    }
6
  • Olá, eu coloquei seu código para rodar e ele está pegando todos os 5 números certinho, mas agora ele n esta colocando em ordem. Você sabe o possível motivo?
    – Lunnie
    Commented 13/08/2017 às 5:18
  • Corrigi e tirei, vê se funciona agora
    – Bruno H.
    Commented 13/08/2017 às 5:47
  • Notei que você está pedindo o peso eu usaria outro tipo em vez de Int, já que o mesmo não aceita ponto flutuante
    – Bruno H.
    Commented 13/08/2017 às 5:52
  • Olá Bruno, com sua nova correção o código esta rodando certinho! Obrigado pela sua atenção e ajuda. Você me recomendaria usar o Double?
    – Lunnie
    Commented 13/08/2017 às 10:44
  • Sim, Double ou float
    – Bruno H.
    Commented 13/08/2017 às 12:39
1

Estou a responder como alternativa à solução do Bruno, utilizando Java 8 e Streams. E embora possa secalhar não ser tão educativa é certamente interessante.

A parte de leitura seria igual e separada da ordenação:

int vet[] = new int [5];

for(int i = 0; i < vet.length; i++ ) {
    vet[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite o peso: "));
}

Agora para ordenar e mostrar faria assim:

Arrays.stream(vet).sorted().forEach(x -> System.out.println(x));

O .stream(vet) cria a Stream de inteiros que será uma IntStream. Depois o .sorted() ordena a Stream e por fim o forEach corresponde ao ciclo que era feito no fim para mostrar cada elemento.

1
  • Obrigado pela dica!
    – Lunnie
    Commented 14/08/2017 às 4:02

Você deve fazer log-in para responder a esta pergunta.

Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag .