Как преобразовать массив int в двойной массив java? - PullRequest
1 голос
/ 03 августа 2020

В настоящее время работает над проектом, который запрашивает количество уроков, которые студент оставил, количество уроков, взятых за семестр, и возвращает количество семестров, оставшихся до окончания. У меня возникли проблемы с выяснением того, как преобразовать целочисленный массив в двойной массив, чтобы определить количество необходимых терминов. Также результат тоже нужно округлить. Я новичок в этом, поэтому очень ценю любые предложения и критику по поводу того, как очистить мой код, заранее спасибо.

import java.util.Scanner;

public class main {

public static void main (String[] args) {
    
    Scanner input = new Scanner (System.in);

    System.out.print("Enter the number of rows: ");
    int rows = input.nextInt();
    System.out.print("Enter the number of columns: ");
    int columns = input.nextInt();
    
    int [][] studentArray = new int [rows][columns];
    
    
    for (int i = 0; i <= rows-1; i++) {
        for (int j = 0; j <= columns-1; j++) {
             
            if (j==0) {
                System.out.print("Please enter the number of classes left for student " +(i+1)+ " : ");
                studentArray[i][j] = input.nextInt();
                }
            
            else if (j>0) {
                System.out.print("Enter the number of classes taken per term : ");
                studentArray[i][j] = input.nextInt();
                
                while (studentArray[i][j] >= 6) {
                    System.out.println("The number of classes per term for student " +(i+1)+ " is not valid!");
                    System.out.print("Enter the number of classes taken per term : ");
                    studentArray[i][j] = input.nextInt();
                }
                }
            }
        }
    
    divide(studentArray);
}

public static void divide(int termsLeft[][]) {
for (int k = 0; k < termsLeft.length; k++) {
    double result = termsLeft[k][0] / termsLeft[k][1];
    if (k>=0) {
    System.out.println("Student " +(k+1)+ " has " + result + " terms left to graduate.");
    }
    }
}

}

1 Ответ

1 голос
/ 03 августа 2020

Прежде всего, это некоторые проблемы в вашем коде, которые делают его очень неэффективным.

1)

for (int i = 0; i <= rows-1; i++) {
    for (int j = 0; j <= columns-1; j++) {
    }

В вашем внутреннем и внешнем l oop у вас нет использовать знак <= и вычесть 1 из правого значения. вы можете использовать <code>i < rows & j < columns.

2)

if (k>=0) {
    System.out.println(...)
    }

Нет необходимости использовать оператор if, поскольку он всегда верен.

Теперь переходя к вашему вопросу.

Вы можете использовать метод Math.round для округления двойных значений в long (может хранить значения, превышающие int).

    double result = termsLeft[k][0]/termsLeft[k][1];
    long round_result = Math.round(result);

Итак, ваш окончательный код ниже:

import java.util.Scanner;

public class Main {

    public static void main (String[] args) {

        Scanner input = new Scanner (System.in);

        System.out.print("Enter the number of rows: ");
        int rows = input.nextInt();
        System.out.print("Enter the number of columns: ");
        int columns = input.nextInt();

        int [][] studentArray = new int [rows][columns];


        for (int i = 0; i <= rows-1; i++) {
            for (int j = 0; j <= columns-1; j++) {
                if (j==0) {
                    System.out.print("Please enter the number of classes left for student " +(i+1)+ " : ");
                    studentArray[i][j] = input.nextInt();
                }

                else if (j>0) {
                    System.out.print("Enter the number of classes taken per term : ");
                    studentArray[i][j] = input.nextInt();

                    while (studentArray[i][j] >= 6) {
                        System.out.println("The number of classes per term for student " +(i+1)+ " is not valid!");
                        System.out.print("Enter the number of classes taken per term : ");
                        studentArray[i][j] = input.nextInt();
                    }
                }
            }
        }

        divide(studentArray);
    }

    public static void divide(int[][] termsLeft) {
        for (int k = 0; k < termsLeft.length; k++) {
            double result = termsLeft[k][0]/termsLeft[k][1];
            long round_result = Math.round(result);
            System.out.println("Student " +(k+1)+ " has " + round_result + " terms left to graduate.");
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...