Вызов метода класса дважды; один раз для строк, а затем для столбцов

Вызов метода getSize() дважды для двух входных ответов. Сначала следует перейти к строкам, а затем к столбцам. Моя проблема это распечатывает..

rows: 6
columns: 4
rows: 6
columns: 4

когда это должно распечатать как...

Please enter number of rows: 6

Please enter number of columns: 4

и быть числом от 2 до 6.

Я знаю, что он запускается 4 раза, потому что он вызывает getSize(args) дважды, но я не уверен, куда идти дальше.

    public static void main (String [] args)
{
    // Double arrays declared as integers
    int [][] array1;
    int [][] array2;

    // Text to be printed out for user to read
    System.out.print("Welcome to the Matrix Math Calculator\n");
    System.out.print("-------------------------------------\n");
    System.out.print("Each dimension of the matrix must be at least 2,\n");
    System.out.print("and at most 6, in length\n");
    System.out.print("\n");

    // Calls getSize(args) to get the number for rows and then columns
    int rows = getSize(args);
    int columns = getSize(args);

    // Instantiate input for rows and columns into both double arrays
    array1 = new int [rows][columns];
    array2 = new int [rows][columns];

    // For loop to fill in the rows and column values for double array and get random integers
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            array1 [i][j] = (int)(Math.random() * 9 + 1);
            array2 [i][j] = (int)(Math.random() * 9 + 1);
            System.out.printf("%4s",array1[i][j]+ " ");
            System.out.printf("%4s",array2[i][j]+ " ");
        }
        System.out.println(" ");
    }
}

    public static int getSize(String [] args)
{
    // Scanner for keyboard input
    Scanner keyboard = new Scanner(System.in);

    // Declares input as integer
    int input = 0;

    // The string has [2] arguments
    args = new String[2];

    // The string arguments
    args[0] = ("Please enter number of rows: ");
    args[1] = ("Please enter number of columns: ");

    //
    System.out.print(args[0]);
    input = keyboard.nextInt();

    //
    while(input < 2 || input > 7) {
        System.out.print(args[0]);
        input = keyboard.nextInt();
        if (input < 2 || input > 7) 
            System.out.println("The number you entered was not between 2 and 6.");
    }


    //
    System.out.print(args[1]);
    input = keyboard.nextInt();

    //
    while(input < 2 || input > 7) {
        System.out.print(args[1]);
        input = keyboard.nextInt();
        if (input < 2 || input > 7) 
            System.out.println("The number you entered was not between 2 and 6.");
    }

    //
    return input;
}

2 ответа

Решение

В вашей программе есть избыточность. В вашей функции main () вы вызываете функцию getSize() дважды: один раз для строки и один раз для столбца. Затем в вашей функции getSize() вы берете ввод для строки и столбца. Итак, последний вход отправляется в вашу основную функцию. Вы должны использовать эту функцию getSize() ниже,

          public static int getSize(String args){

      // Scanner for keyboard input
      Scanner keyboard = new Scanner(System.in);

      // Declares input as integer
      int input = 0;

      System.out.print(args);
      input = keyboard.nextInt();

      while(input < 2 || input > 7) {
          System.out.print(args);
          input = keyboard.nextInt();
          if (input < 2 || input > 7) 
              System.out.println("The number you entered was not between 2 and 6.");
      }
      return input;
  }

И в функции main () используйте это

int rows = getSize("Please enter number of rows: ");
int columns = getSize("Please enter number of columns: ");

Вы звоните getSize() метод дважды из основного метода

// Calls getSize(args) to get the number for rows and then columns
int rows = getSize(args);
int columns = getSize(args);

Внутри метода getSize() вы просите ввести количество строк и столбцов. На основании вашего кода все это печатается 4 раза.

Для исправления вы можете передать дополнительный метод методу getSize(), указывающий, брать ли строки или столбцы

например

public static int getSize(boolean isRows){
    // Scanner for keyboard input
    Scanner keyboard = new Scanner(System.in);

    // Declares input as integer
    int input = 0;

    String msg = "Please enter number of ?: ";

    if(isRows)
         msg = msg.replace("?", "rows");
    else
         msg = msg.replace("?", "columns");
    System.out.print(msg);
    input = keyboard.nextInt();

    //
    while(input < 2 || input > 7) {
        System.out.print(msg);
        input = keyboard.nextInt();
        if (input < 2 || input > 7) 
            System.out.println("The number you entered was not between 2 and 6.");
    }
    return input;
}

Этот метод может быть дальнейшим рефакторингом много.

Другие вопросы по тегам