Je me demandais comment définir une plage entre un certain nombre lors de la saisie de nombres?

Merci

J'ai essayé d'utiliser une boucle do mais elle a continué à boucler même lorsque j'ai entré des nombres dans la plage

 public static void main(String args[])
        {
            int row, col, i, j;
            int a[][]=new int[10][10];

            do{
            Scanner sc=new Scanner (System.in);
            System.out.println("Enter the order of a square matrix :");
            row=sc.nextInt();
            col=sc.nextInt();
            /* checking order of matrix and then if true then enter the values
             * into the matrix a[][]
            */

            if(row == col)
            {
                System.out.println("Enter elements in the matrix:"+row*col);

                for(i=0; i<row; i++)
                {

                    for(j=0; j<col; j++) 
                    a[i][j]=sc.nextInt();
                }

            }
            } while(row != col);
           // Display the entered value
            System.out.println ("You have entered the following matrix");

            for (i=0; i<row; i++)
           {
               for (j=0; j<col; j++)
               System.out.print (a[i][j] + " ");
               System.out.println ();
            }
-1
Jack 20 mars 2019 à 10:29

3 réponses

Meilleure réponse

Tout d'abord, vous devez apprendre à extraire des tâches dans des méthodes et ajouter Javadoc pour rendre votre code plus facile à lire.

J'espère que cela vous aidera:

private static final Scanner sc = new Scanner(System.in);

public static void main(String[] args) {
    int dimension;
    System.out.println("Enter the dimension of a squared matrix :");
    dimension = sc.nextInt();
    final int col = dimension;
    final int row = dimension;
    int[][] matrix = fillMatrix(row, col);
    displayMatrix(matrix);
}

/**
 * Prints the given matrix to console
 *
 * @param matrix to be printed
 */
private static void displayMatrix(int[][] matrix) {
    System.out.println("You have entered the following matrix");
    for (int row = 0; row < matrix.length; row++) {
        for (int column = 0; column < matrix[row].length; column++) {
            System.out.print(matrix[row][column] + " ");
        }
        System.out.println();
    }
}

/**
 * Uses users input to fill create a matrix with the given dimensions
 *
 * @param row matrix row dimension
 * @param col matrix column dimension
 *
 * @return a filled matrix
 */
private static int[][] fillMatrix(final int row, final int col) {
    System.out.println("Enter elements in the matrix:" + row * col);
    int[][] matrix = new int[col][row];
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            int tmpNumber = 0;
            while(tmpNumber<15 || tmpNumber >60){
                System.out.println(String.format("Enter value for row %s, column %s between 15 and 60", i, j));
                tmpNumber = sc.nextInt();
            }
            matrix[i][j] = tmpNumber;
        }
    }
    return matrix;
}

Production:

Enter the dimension of a squared matrix :
2
Enter elements in the matrix:4
Enter value for row 0, column 0 between 15 and 60
2
Enter value for row 0, column 0 between 15 and 60
17
Enter value for row 0, column 1 between 15 and 60
18
Enter value for row 1, column 0 between 15 and 60
19
Enter value for row 1, column 1 between 15 and 60
20
You have entered the following matrix
17 18 
19 20 
0
DCO 20 mars 2019 à 08:23

Ajoutez d'abord les limites en tant que constante

final int LOWER_BOUND = 0;
final int UPPER_BOUND = 100;

Vérifiez ensuite dans la boucle chaque valeur entrée par rapport aux limites avant d'ajouter la valeur au tableau

int temp = sc.nextInt();
if (temp >= LOWER_BOUND && temp <= UPPER_BOUND) {
    a[i][j] = temp;
} else {
    System.out.println("Values has to be between " + LOWER_BOUND + " and " + UPPER_BOUND);
}

Le problème qui reste est que vous ne pouvez pas utiliser vos for boucles telles qu'elles sont actuellement car l'utilisateur peut avoir besoin de plusieurs itérations pour entrer la bonne valeur. Une solution simple consiste à entourer le code ci-dessus dans une boucle infinie while qui n'est pas quittée tant qu'une valeur correcte n'est pas donnée.

while (true) {
    int temp = sc.nextInt();
    if (temp >= LOWER_BOUND && temp <= UPPER_BOUND) {
        a[i][j] = temp;
        break;
    } else {
        System.out.println("Values has to be between " + LOWER_BOUND + " and " + UPPER_BOUND);
    }
}

Une meilleure solution pourrait être de remplacer la boucle for la plus interne par une boucle while où vous augmentez j manuellement lorsqu'une valeur correcte a été saisie

0
Joakim Danielson 20 mars 2019 à 08:01

Ceci est un exemple simple pour votre cause.

  public static void main(String[] args) {
        int number;
        String getInputLine;
        Scanner sc = new Scanner(System.in);
        int a[][] = new int[10][10];
        // for number of rows in your array
        for (int i = 0; i < a.length; i++) {
            // for number of columns in your array
            for (int j = 0; j < a[0].length; j++) {

                // print this message on screen
                System.out.print("Enter your number: ");
                // get input from next line
                getInputLine = sc.nextLine();
                //if you haven't match one or more integers
                while (!getInputLine.matches("\\d{1,}")) {
                    System.out.print("Error! You inputted an invalid passcode, try again: ");
                    getInputLine = sc.nextLine(); // Prints error, gets user to input again
                }
                number = Integer.parseInt(getInputLine); // parse input into an integer
                a[i][j] = number; // store it to array at position i j
                System.out.println("You've set number " + number + " for array[" + i + " " + j + "]"); // Prints the passcode


            }
        }
        //print your array
        System.out.println(Arrays.deepToString(a));
    }
}
0
MS90 20 mars 2019 à 08:14