Задача на цикл 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 шт):
Я решил с одним циклом, но выглядит не очень.
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);
}
}
Если оценки уже известны, то вводить их не надо, я думаю. Поэтому давайте условимся, что мы как бы получили из вне. Тогда можно написать такой код:
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 позволяющие удалять и добавлять элементы.