Member 13738973 Ответов: 2

Что-то не так в моем коде?


я должен добавить только каждый столбец отдельно, я сделал это, но что-то не так в моем коде, вместо того чтобы добавлять столбцы, чтобы отобразить его только один раз, он отображает ответ несколько раз и суммирует, сколько столбцов было добавлено. Как мне это исправить?

Я был бы признателен за любые советы
Спасибо

Что я уже пробовал:

public class Vetting{
    
   Scanner input = new Scanner(System.in);
   String TeacherName;
   int RatesArray[][] = new int [5][5];
   
    int Assessment1,Assessment2,Assessment3,Assessment4,Assessment5;
   public int [][] RateArray()
   {
       System.out.println("Enter Assessment marks");
       for(int row =0; row<RatesArray.length;row++)
       {
           for(int col = 0; col<RatesArray.length;col++)
           {
               RatesArray[row][col] = input.nextInt();
           }
           
           
       }
       return RatesArray;
   }
   //Displaying output of the table array 
   public void OutputArray()
       {
           RateArray();
           System.out.println("The rates are: ");
           System.out.print("\t\t\t Assessment 1, Assessment 2,  Assesment 3,  Assessment 4 ,  Assessment 5");
                System.out.println(" ");

                for(int i = 0; i < RatesArray.length; i++)
              {
                System.out.print( "Student " + (i+1) +": \t");

                for(int j = 0; j < RatesArray.length; j++)
              {
                System.out.print("\t\t"+ RatesArray[i][j]);
              }
                System.out.println("\n");

       }
           System.out.println(getTotal() + ",");
           System.out.println("The last number in the total array is: " + getMin());
           System.out.println("Good job on the high score of: " + getMax());
           System.out.println("You could improve on the score of: " + getMin());
           
       }
   
    //Adding the sum of columns only
    public int getTotal()
    {  
        int column= RatesArray.length;
    
        int columnsum [] = new int [column];
        
        for (int i = 0; i < RatesArray.length; i++)
        {
                for (int j = 0; j < RatesArray.length; j++)
            {
                columnsum[i] += RatesArray[j][i];
            }
        }
        System.out.println(Arrays.toString(columnsum));
        return column;
    }
    //Get largest value from getTotal
    public int getMax()
    {  
        int Largest = 0;

         for (int i = 1; i < getTotal(); i++)
            {
                if (Largest < getTotal())
                {
                    Largest = getTotal();
                }
            }
        
        return Largest;
    }
    //Get lowest value from getTotal
    public int getMin()
    {
        int Lowest = 0;

         for (int i = 1; i > getTotal(); i++)
            {
                if (Lowest > getTotal())
                        
                {
                    Lowest = getTotal();
                }
            }
        
        return Lowest;
    }

2 Ответов

Рейтинг:
9

User 7429338

В GetTotal индексы вашего массива меняются местами:

columnsum[i] += RatesArray[j][i];

Должно быть:
columnsum[i] += RatesArray[i][j];


Другая проблема, которая теперь скрыта, потому что массив имеет размер 5x5, заключается во внутренних циклах:

for (int i = 0; i < RatesArray.length; i++)
{
        for (int j = 0; j < RatesArray.length; j++)
    {
        columnsum[i] += RatesArray[j][i];
    }
}

Должно быть:
for (int i = 0; i < RatesArray.length; i++)
{
        for (int j = 0; j < RatesArray[i].length; j++)
    {
        columnsum[i] += RatesArray[i][j];
    }
}


Member 13738973

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


for (int i = 0; i < RatesArray.length; i++)
{
for (int j = 0; j < RatesArray[i].length; j++)
{
columnsum[j] += RatesArray[i][j];
}
}

Рейтинг:
12

Jochen Arndt

Я не скомпилировал и не выполнил вашу программу но есть несколько заметных линий:

В getTotal() вы обращаете индекс массива вспять:

columnsum[i] += RatesArray[j][i];
Разве так не должно быть [i][j]?

В getMax() вы сравниваете с неправильным (фиксированным) значением, возвращаемым getTotal() который также печатает один и тот же вывод несколько раз:
if (Largest < getTotal())
{
    Largest = getTotal();
}
Вы должны снова повторить итерацию по всем записям массива, чтобы найти максимум и распечатать его, а не вызывать getTotal().

Похожие на getMin().


Member 13738973

Причина, по которой я вызываю getTotal (), заключается в том, что мне нужно найти наименьшее и наибольшее число, которое отображается в методе getTotal (), но мой getTotal() отображает его несколько раз

Member 13738973

Причина, по которой я делаю это [j][i], заключается в том, чтобы найти сумму столбцов, а не строк

Member 13738973

Когда я комментирую getMax() и getMin() и запускаю свой код, он дважды отображает общее количество столбцов и показывает, сколько элементов находится в getTotal()

Jochen Arndt

Ответьте на все комментарии:

Вы печатаете все итоговые значения в getTotal(). Если это печатает ожидаемые результаты: хорошо.

Но тогда вы не должны вызывать его снова, потому что он будет печатать снова. И он будет печатать общее количество, а не мин. или Макс.

Лучшим решением было бы не печатать в вычислительных функциях, а передать результат вызывающему объекту, который затем печатает. Это требует больше строк кода, но делает его более понятным.

Я понял, что мин. и Макс тоже. значения должны быть определены для каждого студента аналогично общему (но тогда с помощью [i][j]). Затем просто используйте код, похожий на getTotal (), но только для min. и Макс тоже.

Если нет, храните результаты в массивах, как с помощью columnsum (возможно, это то, что вы хотите использовать).

Должен признаться, что я понял не все части задания (то, что должно быть напечатано окончательно), но по крайней мере мин. и Макс тоже. вычисления определенно неверны и выводят итоговые значения снова и снова.

Member 13738973

Спасибо, что я исправил методы min и max, и я ясно понимаю, что вы имеете в виду, не добавляя к нему getTotal.

Другая проблема заключается в том, что когда он отображает все итоговые значения столбцов, почему он отображает, сколько элементов получает общая сумма?

Jochen Arndt

System.out.println(getTotal() + ",");
При вызове функции getTotal() содержимое массива выводится следующим образом
[1, 2, 3, 4, 5]
Но приведенная выше функция println() также выведет значение, возвращаемое функцией getTotal() (то есть количество элементов), за которым следует запятая. Он просто делает то, что вы определили в своем коде :)

Member 13738973

Исправлено! Миллион раз спасибо, ты просто спасатель