[JAVA] Programa irresoluble en java

Iniciado por Unchained, 5 Abril 2014, 19:58 PM

0 Miembros y 2 Visitantes están viendo este tema.

Unchained

Muy buenas amigos, queria preguntarles si alguien sabria realizar este code, lo econtre en un libro y no he sido capaz de resolverlo.

Es un auténtico dolor de cabeza.

Un saludo


Mitsu

Según lo entiendo yo, ésto es así:

Ingresar una serie de números mayor o igual a 1 y menor o igual a 1000.

Código (=java) [Seleccionar]

Scanner read = new Scanner(System.in);
System.out.println("Ingrese una serie de números enteros");
String numeros = read.nextLine();


Convertimos los números a enteros:

Código (=java) [Seleccionar]

String[] numeroserie = numeros.split(" ");
int[] serie = new int[numeroserie.length];

try {
for(int i=0; i<numeroserie.length; i++) {
serie[i] = Integer.parseInt(numeroserie[i]);
}
} catch(NumberFormatException ex) {
ex.printStackTrace();
}


Sacamos el total y el porcentaje que pide:

Código (=java) [Seleccionar]

int total = 0;
for(int i=0; i<serie.length; i++) {
total += serie[i];
}

int porcentaje = 25 * total / 100;


Creamos un método para determinar el menor de la serie:

Código (=java) [Seleccionar]

public int getMenor(int... numeros) {
int menor = numeros[0];
for(int number : numeros) {
if(number < menor) {
menor = number;
}
}
return menor;
}


Ahora ya sabemos quién es el cuadril, en caso no alcance por ser mayor al 25% descartas ese número y sigues con el 2do menor, y así...


Luego para ordenar la lista es muy sencillo, debes de saberlo. Recorres la nueva lista en un for e imprimes con un espacio intermedio.


Salu2.

Unchained

#2
Cita de: Mitsu en  5 Abril 2014, 20:29 PM
Según lo entiendo yo, ésto es así:

Ingresar una serie de números mayor o igual a 1 y menor o igual a 1000.

Código (=java) [Seleccionar]

Scanner read = new Scanner(System.in);
System.out.println("Ingrese una serie de números enteros");
String numeros = read.nextLine();


Convertimos los números a enteros:

Código (=java) [Seleccionar]

String[] numeroserie = numeros.split(" ");
int[] serie = new int[numeroserie.length];

try {
for(int i=0; i<numeroserie.length; i++) {
serie[i] = Integer.parseInt(numeroserie[i]);
}
} catch(NumberFormatException ex) {
ex.printStackTrace();
}


Sacamos el total y el porcentaje que pide:

Código (=java) [Seleccionar]

int total = 0;
for(int i=0; i<serie.length; i++) {
total += serie[i];
}

int porcentaje = 25 * total / 100;


Creamos un método para determinar el menor de la serie:

Código (=java) [Seleccionar]

public int getMenor(int... numeros) {
int menor = numeros[0];
for(int number : numeros) {
if(number < menor) {
menor = number;
}
}
return menor;
}


Ahora ya sabemos quién es el cuadril, en caso no alcance por ser mayor al 25% descartas ese número y sigues con el 2do menor, y así...


Luego para ordenar la lista es muy sencillo, debes de saberlo. Recorres la nueva lista en un for e imprimes con un espacio intermedio.


Salu2.

Muchas Gracias Mitsu , tengo una duda,
para ordenar con for seria algo parecido a esto ?

public static void burbujaPalabras (String lista_palabras[]){
        boolean ordenado=false;
        int cuentaIntercambios=0;
        //Usamos un bucle anidado, saldra cuando este ordenado el array
        while(!ordenado){
            for(int i=0;i<lista_palabras.length-1;i++){
                if (lista_palabras[i].compareToIgnoreCase(lista_palabras[i+1])>0){
                    //Intercambiamos valores
                    String aux=lista_palabras[i];
                    lista_palabras[i]=lista_palabras[i+1];
                    lista_palabras[i+1]=aux;
                    //indicamos que hay un cambio
                    cuentaIntercambios++;
                }
            }
            //Si no hay intercambios, es que esta ordenado.
            if (cuentaIntercambios==0){
                ordenado=true;
            }
            //Inicializamos la variable de nuevo para que empiece a contar de nuevo
            cuentaIntercambios=0;
        }

    }

Unchained

No he sido capaz de crear el for , y aun no he conseguido que los System.out.println() me muestren algo.
Un saludo y muchas gracias

Mitsu

Hay muchos métodos para ordenar un arreglo, tienes el quicksort, la burbuja, etc.

Si quieres algo rápido, puedes usar el método sort de List, para ésto tendrías que convertir el array a List:

Código (=java) [Seleccionar]

public static List<Integer> getSortList(int[] serie) {
// se supone que hasta aqui ya hemos encontrado nuestro cuadril
int cuadril = ?
List<Integer> serie2list = Arrays.asList(serie); // convierte a List el array serie que contiene los numeros
serie2list.remove("cuadril"); // elimina el cuadril momentaneamente
serie2list.sort(); // ordena la lista
serie2list.add(0,cuadril); // agrega el cuadril en la primera posicion

return serie2list;
}

// imprime la lista ordenada con el cuadril en el primer lugar
for(Integer i : getSortList(serie)) {
System.out.print(i+" ");
}


También puedes convertir una List a Array con el método toArray(). Ej:

Código (=java) [Seleccionar]

Object[] array = getSortList(serie).toArray();



Salu2.

Unchained

Gracias por la rapidez, al intentar compilar me da estos errores:

Mitsu

Hmm por lo que veo fallan algunos conceptos básicos que debes tener. Debes de darte cuenta que el error en el método te lo da porque no has importado la clase java.util.List. Y en la línea int cuadril = ? no es una línea de código, te pongo el '?' porque ese método debe de usarse luego que ya se hallado el cuadril. Para ésto crea una variable llamada cuadril y en el método que detecta el cuadril, asígnale el cuadril detectado a la variable. Hay que aprender a leer los errores que te da el IDE.

Salu2.

Unchained

Buenas Mitsu, y perdona por la paliza que te estoy dando.. pero es que soy muy novato en esto aun..

Me siguen dando mogollón de errores de compilación y ya no se que mas cambiar.
Serias tan amable de ponerme el codigo todo en uno asi veo que estoy haciendo mal?

De todas formas muchisimas gracias por todo.

Un saludo