Pregunta

Estas son mis preguntas:

  1. Me estoy poniendo un par de errores en la línea de "public boolean validNumCheck (num String) {estática" - "arranque ilegal de expresión", " ';' esperado", y " ')' espera".

  2. ¿Cómo puedo dar al usuario 3 intentos en total para cada número? Creo que en este momento el programa pregunta al usuario por los números 3 y les da 3 intentos en total para obtener los números correctos (Mis explicaciones chupan ... leer el código para obtener una mejor idea de lo que quiero decir).

Este es mi código:

import javax.swing.JOptionPane;

public class Assignment3 {
    public static void main (String[] args){
        final int MAX_TRIES = 3;
        int[] attempts= new int[2];
        String[] getNumber= new String [2];

        //Ask the user for 3 integers.
        while(attempts[0]<MAX_TRIES){
            getNumber[0]= JOptionPane.showInputDialog(null,"Please enter an integer between 0-200.");

            //Pass the value to validNumChek
            validNumCheck (getNumber);

            //If it is not a valid number give the user 3 more tries.
            if (getNumber== false){
                while(attempts[1]<MAX_TRIES){
                    getNumber[1]= JOptionPane.showInputDialog(null,"Please enter an integer between 0-200.");
                    attempts[1]++;}
                }
            attempts[0]++;
        }

    //Parse the string to an integer and check if it is a valid number.
    public static boolean validNumCheck(String num){
        int number;

        try {
            number = Integer.parseInt(num);
            return number >= 0 && number <= 200;                
        }catch(NumberFormatException e){
            //If it is not a valid number return false.
            return false;
        }
    }
}
¿Fue útil?

Solución

Creo que es importante crear un pseudo código o algoritmo del problema primero y luego si funciona acuerdo con la programación después . De lo contrario estará resolviendo dos cosas al mismo tiempo, la lógica 1. Problema y 2. Los detalles de implementación.

Esta es la forma en que lo haría.

//The three numbers should be entered by a user in the main method. 

MAIN PROGRAM starts 
declare a , b , c as numbers

//The numbers should be positive and less than 200. 
// see validNumCheck below.

//part 1.If not, the program asks the user to renter the number.
//part 2.The user will have three chances to enter a valid number for each number. 
//part 3. If the number is still invalid after the three trials, the program displays an error message to the user and ends.

 // ok then read a number and validate it. 
 attempts = 0;
 maxAttempts = 3;

 //part 2. three chances... .           
 loop_while (  attemtps < maxAttempts ) do  // or 3 directly.

      number = readUserInput();  // part 1. reenter the number...
      if( numcheck( number ) == false ) then 
           attempts = attempts + 1;
           // one failure.. try again. 
      else 
           break the loop.
      end 

 end 

 // part 3:. out of the loop. 
 // either because the attempts where exhausted 
 // or because the user input was correct.  
 if( attempts == maxAttemtps ) then 
     displayError("The input is invalid due to ... ")
     die();
 else  
     a = number 
 end 

// Now I have to repeat this for the other two numbers, b and c.
// see the notes below... 
MAIN PROGRAM ENDS

Y esto sería la función de "validNumCheck"

  // You are encouraged to write a separate method for this part of program – for example: validNumCheck

bool validNumCheck( num )  begin
     if( num < 0 and num > 200 ) then 
         // invalid number 
         return false;
     else 
         return true;
     end
end 

Por lo tanto, hemos llegado a un punto en el que un número "a" se pudo validar pero tenemos que hacer lo mismo con "b" y "c"

En lugar de "copiar / pegar" el código, y complican su vida tratando de modificar el código para adaptarse a las necesidades que puede crear una función y delegado que trabajan para la nueva función.

Así que la nueva pseudo código será la siguiente:

MAIN PROGRAM STARTS 
declare a , b , c as numbers
     a = giveMeValidUserInput();
     b = giveMeValidUserInput();
     c = giveMeValidUserInput();

     print( a, b , c ) 

MAIN PROGRAM ENDS

Y mover la lógica a la nueva función (o método)

La función giveMeValidUserInput sería como este (nótese que es casi idéntica a la primera pseudo código)

function giveMeValidUserInput() starts 
    maxAttempts = 3;
    attempts = 0;


     loop_while (  attemtps < maxAttempts ) do  // or 3 directly.

          number = readUserInput();
          if( numcheck( number ) == false ) then 
               attempts = attempts + 1;
               // one failure.. try again. 
          else 
               return number 
          end 

     end 

     // out of the loop. 
    // if we reach this line is because the attempts were exhausted.
     displayError("The input is invalid due to ... ")
   function ends 

El validNumCheck no cambia.

El paso de hacer que el código será algo sencillo. Porque ya se ha entender lo que quiere hacer (análisis), y cómo quiere hacerlo (diseño).

Por supuesto, esto sería más fácil con la experiencia.

Resumen

El pasos para pasar del problema a la código son :

  1. Lee el problema y entenderlo (por supuesto).

  2. Identificar posibles "funciones" y variables.

  3. Escribir cómo iba a hacerlo paso a paso (algoritmo)

  4. traducirlo a código, si hay algo que no se puede hacer, crear una función que lo hace por usted y mantenerse en movimiento.

Otros consejos

Este hilo puede ser útil. Esos son consejos para pasar de "la descripción del problema" a "codificación real"

De acuerdo con sus preguntas específicas:

  

¿Cómo puedo dar al usuario tres oportunidades para introducir un número válido para cada número? (No quiero que la 'respuesta' sólo algunas ideas / sugerencias.

¿Cómo hacer que si usted fuera un cajero (con mala memoria) en la vida real? Y quiero decir muy, muy mala memoria, tanto que no puede recordar si usted está rechazando a un cliente por primera vez o la segunda?

Me gustaría escribirlo en una hoja de papel, y cada vez que rechazo el cliente que añadir un "|"

"| | |"

Cuando el documento tiene tres líneas en él que yo llamaría a la policía. .. :)

Esto es similar aquí. Si usted no tiene alguna lo que puede variar obtendrá en una infinita bucle ;)

  

¿Es validNumCheck supone que debe devolver un valor y luego salir en el método void main

No

  

... o puedo tener sólo salir del programa en que el método principal?

Sí.

Cuando se cuenta (en la vida real) que no es necesario para almacenar los números en las cajas, sólo hay que cambiar el valor de la cuenta y tienen un límite.

Por ejemplo, puede reemplazar esta:

        int[] count= new int[2];

Con esta:

        int attemtps = 0 ; // or count 
        int maxTries = 3;

No se puede asignar una matriz de enteros a un matrices de cadenas.

       String[] getNumber= new int [2];

El uso de una matriz de cadenas puede funcionar, pero hay que asignar una matriz de cadenas

       String[] numbers = new String[2];

O se puede usar y matriz de int:

       int [] numbers = new int [2]; 

Escoja uno.

Recuerde matrices son como cajas donde puede almacenar valores.

En el firma (que sería "public static int validNumCheck(num1,num2,num3)"), usted tiene que declarar los tipos de la parámetros formales . "public static int validNumCheck(int num1, int num2, int num3)" debe hacer el truco.

Sin embargo, un mejor diseño sería hacer validNumCheck tener sólo un parámetro, y luego lo llamaría con cada uno de los tres números.


Mi sugerencia siguiente (después de haber visto su código actualizado) es que se obtiene un IDE decente. Me acaba de cargar para arriba en NetBeans y se encontró un número de errores. En particular, el "inicio ilegal de expresión" es porque se le olvidó un } en el bucle while, que sería un IDE han notificado inmediatamente. Después de pasar por encima "Hola mundo", el Bloc de notas simplemente no se corte nunca más.

No voy a enumerar las correcciones para cada error, pero tenga en cuenta que int[], int, String[] y String son todos diferentes. Usted parece estar utilizando indistintamente (probablemente debido a la cantidad de cambios que ha hecho a su código). Una vez más, un IDE haría bandera de todos estos problemas.


En respuesta a su más reciente código (revisión 12): Te estás acercando. Parece que tienes MAX_TRIES usada para dos propósitos distintos: los tres números para entrar, y los tres posibilidades para cada número. Si bien estos dos números son los mismos, es mejor no utilizar la misma constante para ambos. NUM_INPUTS y MAX_TRIES son lo que yo llamaría ellos.

Y todavía no ha añadido el } que falta para el bucle while.

La siguiente cosa que hacer después de la fijación de los sería mirar if (getNumber == false). getNumber es un String[], por lo que esta comparación es ilegal. Que debería estar recibiendo el valor de retorno de validNumCheck en una variable, por ejemplo:

boolean isValidNum = validNumCheck(getNumber[0]);

Y también, no hay razón para getNumber a ser una matriz. Sólo se necesita una String a la vez, ¿verdad?

Cada parámetro en una definición del método necesita un tipo:

public static int validNumCheck(int num1, int num2, int num3){

pero me pregunto por qué se pasa los tres números en, cuando sólo se comprueba una a la vez. Y desea volver si el número es verdad o no, por lo que el valor de retorno debe ser un booleano:

public static boolean validNumCheck(int num){
    // test and return true or false

Además, si el usuario introduce "abc", obtendrá una excepción del método "Intger.pareInt (cadena)". Tal vez usted quiere guardar el texto introducido como una cadena de un dárselo a validNumCheck, intenta convertir y comprobar si se encuentra entre 0 y 200.

public static boolean isValidNumber(String num){
try {
    int number = Integer.parseInt(num);
    return number >= 0 && number <= 200;        
}catch(NumberFormatException e){
    return false;
}
} 

EDIT 1: Para los tres intentos, se necesita un bucle, que se ejecuta hasta que el número es válido o se toman tres intentos. Simplemente contar los intentos con en Int.

Por cierto, ¿está seguro de que tiene que utilizar JOptionPane y JMessageDialog? Esto es algo GUI y solo complica esa cosa agujero. También puede leer y escribir el texto a la consola mediante System.out y System.in

EDIT 2: Un consejo más, cuando se crea una matriz int con una longitud dada, cada lugar de la matriz se llena con 0, por lo que podría escribir:

int[] count= new int [3];

y no es necesario que:

count[0]=0;
count[1]=0;
count[2]=0;

Y si desea utilizar otros valores de 0, se puede utilizar una forma más corta de esta manera:

int[] count = {1, 5, 2}

EDITAR 3: Una cosa que debe hacer / aprender es esto: no escribir todo el asunto y terminar con muchos errores y un programa no se ejecuta. código un poco, probar un poco . Realice una parte de ella, ver correr y usted es feliz.

¿Esta vez se ha quedado algo? Es decir, ¿ya viste que JOptionPane-InputDialog intenta utilizar? Si no, ¿sólo esto primero: (! Y ejecutarlo)

public class Assignment3 {

    public static void main (String[] args){

        int[] numbers = new int[3];

        for (int i = 0; i < numbers.length; i++) {
            JOptionPane.showInputDialog("enter something");
        }
    }
}

Tienes que se ejecute? ¡Excelente! Ahora, trata de envolver esa línea con el JOptionPane en un bucle, que se ejecuta hasta que el usuario ha introducido un número válido (utilizando el método checkValidNum que ya tienes) o utilizó sus tres intentos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top