如何接受一定范围内的二维数组的值

时间:2019-03-20 07:29:06

标签: java arrays

我想知道在输入数字时如何在某个数字之间设置范围?

谢谢

我尝试使用do循环,但是即使我输入了范围内的数字,它也一直循环播放

 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 ();
            }

3 个答案:

答案 0 :(得分:0)

首先,您应该学习提取方法中的任务并添加Javadoc以使代码更易于阅读。

希望这对您有帮助:

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;
}

输出:

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 

答案 1 :(得分:0)

首先将边界添加为常量

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

然后在将值添加到数组中之前,对照范围在循环中检查每个输入的值

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);
}

剩下的问题是您不能像现在那样使用for循环,因为用户可能需要多次迭代才能输入正确的值。一种简单的解决方案是将上述代码放在无限的while循环中,直到给出正确的值才退出。

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);
    }
}

更好的解决方案可能是将最里面的for循环替换为while循环,在此循环中,当您输入正确的值时手动增加j

答案 2 :(得分:0)

这是您原因的简单示例。

  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));
    }
}