Problemilla bucle de JAVA

Iniciado por dennis094, 1 Marzo 2013, 23:09 PM

0 Miembros y 1 Visitante están viendo este tema.

dennis094

Buenas,
estoy haciendo un programa formado por 3 modulos, el primero de ellos que es con el que estoy ahora mismo me pide que escriba 6 numeros separados por una "," entre ellos, y que despues los almacene en un array de tipo Int para despues imprimirlo.
Hasta ahi lo he conseguido, pero hay una condicion que dice que los numeros introducidos deben estar entre el 1 y el 49 (ambos incluidos) y que no puede haber numeros repetidos, por ejemplo:
*VALIDO* 1,43,12,21,7,9
*NO VALIDO* 1,50,24,24,12,1
¿Como podria conseguirlo? tengo un bucle con un IF pero no funciona bien, espero vuestra ayuda.
package loteriaprimitiva;

import java.util.Scanner;
import java.util.Random;

public class LoteriaPrimitiva {

    public static void main(String[] args) {
      Scanner entrada = new Scanner(System.in);
     
        String Combinacion;
        String MiCombinacion[] = new String [6];
        int MisNumeros[] = new int [6];
        int i;
       
        System.out.println("EJERCICIO 1 LAB PROGRAMACIÓN. \n");
        System.out.println("**LOTERIA PRIMITIVA** \n");

        //METODO JUGAR (PEDIR 6 NUMEROS)
             System.out.println("NOTA: *Sólo debe introducir 6 numeros separados por coma, pues solo se leerán los 6 primeros.*");
             System.out.print("Introduzca su combinación: "); 
             Combinacion = entrada.nextLine();
             // Lee el string Combinacion y se salta las "," y guarda el resultado en el array MiCombinacion.
             MiCombinacion = Combinacion.split(",");
             
             
             for (i=0;i<6;i++){
                 MisNumeros[i] = Integer.parseInt(MiCombinacion[i]);// Convierte el array de String en un array de Int
                if (MisNumeros[i] > 49  || MisNumeros[i] < 1) {
                     System.out.println(" No es un numero correcto.");
                     System.out.print("Introduzca su combinación: ");
                     Combinacion = entrada.nextLine();
                         }
             }
             
                     
             
             System.out.print("Combinación jugada: ");
             for (i=0;i<6;i++) {
                 System.out.print(MisNumeros[i]+","); 
             }
           
                   
    }
}

             
                 

1mpuls0

Pues solo se me ocurre lo siguiente xD

Código (java) [Seleccionar]

/**
*
* @author Darhius929
*/
import java.util.Scanner;
import java.util.Random;

public class LoteriaPrimitiva {
   
    private final int TAMANO = 6;
    private final int SUBINDICE = 1;
    private final int SUPERINDICE = 49;
   public static void main(String args[]){
       new LoteriaPrimitiva();
   }
   
   public LoteriaPrimitiva(){
       Scanner entrada = new Scanner(System.in);
        String combinacion;
        String miCombinacion[] = new String [TAMANO];
        //int misNumeros[] = new int [TAMANO];
       
        System.out.println("NOTA: *Sólo debe introducir 6 numeros separados por coma, pues solo se leerán los 6 primeros.*");
        System.out.print("Introduzca su combinación: "); 
        combinacion = entrada.nextLine();
       
        miCombinacion = combinacion.split(",");
        boolean esValido = false;
        for(int indice=0; indice<TAMANO; indice++){
            try {
                int numero = Integer.parseInt(miCombinacion[indice]);
                if(numero>=SUBINDICE && numero<=SUPERINDICE) {
                    //System.out.println("el numero " +numero+" es valido");
                    for(int indice2=0; indice2<TAMANO; indice2++) {
                         try {
                            int numero2 = Integer.parseInt(miCombinacion[indice2]);
                            if(numero==numero2 && indice!=indice2) {
                                System.out.println("Hay numeros repetidos");
                                esValido=false;
                                break;
                            }else {
                                esValido=true;
                            }
                         }catch(Exception ex) {
                             ex.printStackTrace();
                         }
                    }
                }else {
                    System.out.println("Se encontro un numero fuera del rango");
                    esValido=false;
                    break;
                }
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
        if(esValido){
            System.out.println("Buena combinacion");
        }
   }
}



Saludos.
abc

dennis094

Gracias, al final no lo hice exactamente asi, pero me ayudaste a pensar en una forma nueva, simplemente hice un DO WHILE y le agrege un par de cosillas que me faltaban.

Tengo otro problemilla...

Una vez haya introducido los 6 numeros que me piden, no puede haber ningun numero repetido, y si lo hay debo volver a introducirlos otra vez.

Mi idea es crear un bucle for que recorra el array y vaya comprobando si los numeros que he introducido estan repetidos, pero no se exactamente como hacerlo.
Espero que puedan ayudarme :D
Un saludo !

1mpuls0

Sí de hecho lo iba a hacer de las dos formas pero como miré que utilizabas el for pensé que tenia que ser necesario así y tambien habia pensado que se debian volver a introducir el dato.

En este caso tendrías que usar dos do while el primero es para empezar a leer los datos el segundo es para comparar si existe el valor (hacer mientras valor existe en arreglo).

Igual y más tarde te apoyo.

Saludos..
abc

dennis094

#4
Esque me sale un problema, he hecho un boolean, y si encuentra algun numero repetido = error, entonces, if (error) --> vuelve a introducir numeros.
Pero solo me los pide una vez, y aunque meta otra vez datos repetidos ya los toma como validos. Entonces he pensado en otro DO WHILE, pero no funciona correctamente.. te dejo el codigo por si encuentras algun fallo ;)
*Muchas gracias por tu ayuda*
 
                  for (i=0;i<6;i++) { // Bucle para que no se repitan los numeros.
                for (j=aux2;j<6;j++){
                if (misNumeros[i] == misNumeros[j]){
                    error2=true;
            }
            aux2++;}  } // j=0;aux2=1
               
                if (error2){
                    do {
                    System.out.println(" Ha repetido algun/os numeros.");
                    System.out.print("Introduzca su combinación: ");
                    combinacion = entrada.nextLine();
                    miCombinacion = combinacion.split(",");
                    for(i=0;i<6;i++){
                    misNumeros[i] = Integer.parseInt(miCombinacion[i]);
                   }
                    }
                    while (error2);
                }