Задача на цикл for

Решаю "Златопольский Д.М - Сборник задач по программированию". Задача 5.57: Известны оценки двух учеников по 4 предметам. Определить сумму оценок каждого ученика. Я решил задачу, но думаю, что нужно использовать только 1 цикл.

import java.util.Scanner;
public class Zlat557  {
    public static void main(String[] args) {
        Scanner read = new Scanner(System.in);
        double sum1 = 0.0, sum2 = 0.0;
        
        for (int t = 1; t <= 4; t++) {
            System.out.print("Object #" + t + ": ");
            int a = read.nextInt();
            sum1 += a;
        }
        System.out.println(sum1);
        
        for (int g = 1; g <= 4; g++) {
            System.out.print("Object #" + g + ": ");
            int b = read.nextInt();
            sum2 += b;
        }
        System.out.println(sum2);
    }
} 

Ответы (2 шт):

Автор решения: SmaugDr

Я решил с одним циклом, но выглядит не очень.

import java.util.Scanner;
public class Zlat557 {
    public static void main(String[] args) {
        Scanner read = new Scanner(System.in);
        double sum1 = 0.0, sum2 = 0.0;
        
        for (int t = 1; t <= 4; t++) {
            System.out.println("Student #1");
            System.out.print("Object #" + t + ": ");
            int a = read.nextInt();
            sum1 += a;
            
            System.out.println("Student #2");
            System.out.print("Object #" + t + ": ");
            int b = read.nextInt();
            sum2 += b;
            
            System.out.println();
        }
        System.out.println("Suuma #1 studenta: " + sum1 + "\n" + "Summa #2 studenta: " + sum2);
    }
}

Однако, я сделал с 2 циклами и выглядит это намного лучше.

import java.util.Scanner;
public class Zlat557a {
    public static void main(String[] args) {
        Scanner read = new Scanner(System.in);
        double sum1 = 0.0, sum2 = 0.0;
        
        System.out.println("Student #1");
        for (int t = 1; t <= 4; t++) {
            System.out.print("Object #" + t + ": ");
            int a = read.nextInt();
            sum1 += a;
        }
        System.out.println("\n" + "Student #2");
        for (int g = 1; g <= 4; g++) {
            System.out.print("Object #" + g + ": ");
            int b = read.nextInt();
            sum2 += b;
        }
        System.out.println("\n" + "Suuma #1 studenta: " + sum1 + "\n" + "Summa #2 studenta: " + sum2);
    }
}
→ Ссылка
Автор решения: Konstantin_SH

Если оценки уже известны, то вводить их не надо, я думаю. Поэтому давайте условимся, что мы как бы получили из вне. Тогда можно написать такой код:

public class Zlat557 {
    
import java.util.Scanner;
    public static void main(String[] args) {
    
    int [] scores1 = new int [4];
    int [] scores2 = new int [4];
    ArrayList base = new ArrayList(); 
    
    scores1 = {90, 70, 100, 80};
    // Оценки как бы были в базе данных
    base.add(scores1);
    // Пришлось ввести оценки студента
    scores2 = newSturentsScore(4, " ");
    base.add(scores2);
    for (int i = 0; i < base.length(); ++i){ 
    System.out.println("Sum of scores of " + (i+1) + "student  is: " + sumOfScores(base.get(i)));
    }
    }
    private int SumOfScores (int [] scores)  {
    int sum = 0;
      for (int i =0; i < scores.length(); ++i) {
      sum += scores[i];
      }
    return sum;
    }
   private int [] newSturentsScore (int listLength, String separator){
   Scanner read = new Scanner(System.in);
   System.out.println("Enter the student`s scores separated by" + separator);
   int [] studentsScores = new int [listLength];

   String inputStr = read.nextString();
   String [] strScores = inputStr.split(separator);
   for (int i = 0; i< listLength; ++i) {
   studentsScores[i] = strScores[i].parseInt();
   }
   return studentsScores;
   }

   
}

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

→ Ссылка