[RESOLVIDO] Organização de Array de inteiros de modo crescente

5 respostas
dileivas

Oi galera! Estou com um problema em um exercício...

Preciso organizar um Array de inteiros de forma que sua impressão saia em ordem crescente, porém usando MÉTODOS. O exercício pede que seja criado um método "organiza" e ou "troca". Esse troca deve ser usado no método "organiza" para trocar as posições dos inteiros no array.

Bom, sem os métodos consegui fazer de boas:

//EXERCÍCIO SEM MÉTODOS
 Scanner sc = new Scanner (System.in);
        int ordem [] = new int[3];
        ordem[0] = sc.nextInt();
        ordem[1] = sc.nextInt();
        ordem[2] = sc.nextInt();
            for (int j = 0; j<ordem.length; j++){
                for(int k = j+1; k < ordem.length; k++){
                    if (ordem[j]>ordem[k]){
                        int temp = ordem[j];
                        ordem[j] = ordem[k];
                        ordem[k] = temp;
                    }
                }
            }      
        for(int l = 0; l<ordem.length; l++){
            System.out.print(ordem[l]+" ");
        }

Agora, com os métodos, não tenho o resultado esperado na saída. Segue o código que fiz:

public class JavaApplication14 {

                 public static void main(String[] args) {
    
        Scanner sc = new Scanner (System.in);
        int[] v = new int [3];
        System.out.print("Digite um valor para A: ");      
        v[0] = sc.nextInt();
        System.out.print("Digite um valor para B: ");
        v[1] = sc.nextInt();
        System.out.print("Digite um valor para C: ");
        v[2] = sc.nextInt();
        System.out.println(" ");
        System.out.println("A ordem crescente dos numeros é: ");
        System.out.println(" ");
        ordena(v);
        System.out.print("A ordem crescente dos valores digitados é: ");
        for(int j=0; j<v.length; j++){
            System.out.print(v[j]+" ");
        }
    }

    public static int[] troca(int a, int b, int[]v){
        v[0] = b;
        v[1] = a;
        return v;
    }

    public static int[] ordena(int[] v){
        for(int i = 0; i<v.length; i++){
            for(int k =i+1; k<v.length; k++ ){
                if(v[i]>v[k]){
                    troca(v[i],v[k],v);
                }
            }
        }
        return v;
    }
}

Nesse código, para inputs A=159, B=45, C=3 tenho a saída 3 45 3... Não consigo enxergar o erro no meu código... Alguém pode ajudar?

Obrigado =)

5 Respostas

J
public static void troca(int j, int k, int[]ordem){  
        int temp = ordem[j];  
        ordem[j] = ordem[k];  
        ordem[k] = temp;  
    }  
  
    public static int[] ordena(int[] v){  
        for(int i = 0; i<v.length; i++){  
            for(int k =i+1; k<v.length; k++ ){  
                if(v[i]>v[k]){  
                    troca(i,k,v);  
                }  
            }  
        }  
        return v;  
    }
velho teu problema era que tu só alterava os indice 0 e 1 o indice 2 nunca era alterado e acredito q o mais correto seria passar só os indices a terem os valores trocados e o vetor mesmo, testei a bagaça e dai funcionou, se for só isso naum eskece de colocar teu tópico como resolvido bz :D
dileivas

Nossa! Muito obrigado jgtorres! Como eu sou cabaço! HAHAHAHAHA! Tão óbvio...

No final meu código ficou assim:

package javaapplication14;
import java.util.Scanner;
public class JavaApplication14 {
     
     public static void main(String[] args) {
        Scanner sc = new Scanner (System.in);
        int[] v = new int [3];
        System.out.print("Digite um valor para A: ");      
        v[0] = sc.nextInt();
        System.out.print("Digite um valor para B: ");
        v[1] = sc.nextInt();
        System.out.print("Digite um valor para C: ");
        v[2] = sc.nextInt();
        System.out.println(" ");
        ordena(v);
        System.out.print("A ordem crescente dos valores digitados é: ");
        for(int j=0; j<v.length; j++){
            System.out.print(v[j]+" ");
        }
    }

    public static void troca(int l, int m,int[] t){
        int temp = t[l];
        t[l] = t[m];
        t[m] = temp;
    }

     public static void ordena(int[] o){
        for(int i = 0; i<o.length; i++){
            for(int k =i+1; k<o.length; k++ ){
                if(o[i]>o[k]){
                    troca(i,k, o);
                }
            }
        }
    }
}

RESOLVIDO!

Vlw! =)

J

kkkkkkkkk dah nada só naum esquece de coloca no titulo [Resolvido]

J

opa desculpa nem vi q tu alterou foi mal ae

dileivas

HAHAHAHA =D

Criado 30 de abril de 2012
Ultima resposta 1 de mai. de 2012
Respostas 5
Participantes 2