#java
#java
Вопрос:
Я создаю программу для нахождения среднего значения всех чисел, введенных пользователем, и сохраняю эти числа, чтобы проверить, падает ли введенное число ниже или выше среднего, которое было рассчитано. Моя программа выводит все введенные числа как ниже среднего. у меня есть проверка переполнения стека на наличие подобных проблем, я все это пробовал, но мой вывод по-прежнему отображается только ниже среднего
Это то, что я пробовал
public void newspaper()
{
System.out.println("Question 4 n");
int youth;
double avg =0;
int sum = 0;
int numYouth = 5;
//The loop for calculating the average
for (int i = 1; i <= 5; i )
{
System.out.println("Youth " i " How many was delivered?");
youth = in.nextInt();
sum = sum youth;
avg = sum / numYouth;
}
System.out.println("Average is: " avg "n");
double aboveAvg = 0;
//The loop for checking below of above average
for (int j = 1; j <=5; j )
{
if(aboveAvg > avg)
{
System.out.println("Youth " j " is above average");
aboveAvg ;
}
else
{
System.out.println("Youth " j " below average");
}
}
}
Комментарии:
1. вы отладили свой код? Я думаю, что ваша ошибка в тесте if (aboveAvg > avg)
2. Как вы упомянули, вам нужно сравнить введенное число с вычисленным средним значением, что означает, что вам нужно их сохранить. Итак, в первом цикле for сохраняем
youth
переменную. внутри некоторой структуры данных, которая, по вашему мнению, подходит для вашей проблемы.3. Ошибка в операторе if yes. когда я меняю переменные местами, это дает мне только значение выше среднего
4. Можете ли вы уточнить, что означает aboveAvg?
5. @Karim ‘aboveAvg’ используется для определения того, соответствуют ли введенные числа значениям выше среднего или ниже среднего
Ответ №1:
Это возможное решение вашей проблемы: обратите внимание, что вам нужно сохранить пользовательские входные данные, вычислить среднее значение один раз (не внутри цикла for) и, наконец, сравнить сохраненные числа со средним значением, рассчитанным ранее.
public void newspaper() {
Scanner in = new Scanner(System.in);
System.out.println("Question 4 n");
double avg = 0;
int sum = 0;
int[] youths = new int[5];
// The loop for calculating the average
for (int i = 0; i < youths.length; i ) {
System.out.println("Youth " (i 1) " How many was delivered?");
youths[i] = in.nextInt();
sum = sum youths[i];
}
// Note that the average can be calculated once, not every iteration
avg = sum / youths.length;
System.out.println("Average is: " avg "n");
// The loop for checking below of above average
for (int i = 0; i < youths.length; i ) {
if (youths[i] > avg) {
System.out.println("Youth " (i 1) " is above average");
} else {
System.out.println("Youth " (i 1) " below average");
}
}
}
Комментарии:
1. Итак, для хранения пользовательских данных это должен быть массив?
2. Вы можете хранить пользовательские данные в любой структуре данных, которая вам нравится, я выбираю array, потому что это просто для понимания.
3. я на самом деле больше понимаю часть массива. это сработало, спасибо, что объяснили это.
Ответ №2:
Попробуйте использовать массив вместо переменной, см. Приведенный Ниже код
import java.util.Scanner;
public class Stackoverflow {
public void newspaper() {
System.out.println("Question 4 n");
double avg = 0;
int sum = 0;
int numYouth = 5;
int youth[] = new int[numYouth];
Scanner sc = new Scanner(System.in);
// The loop for calculating the average
for (int i = 0; i < 5; i ) {
System.out.println("Youth " i " How many was delivered?");
youth[i] = sc.nextInt();
sum = sum youth[i];
avg = sum / numYouth;
}
System.out.println("Average is: " avg "n");
double aboveAvg = 0;
// The loop for checking below of above average
for (int j = 0; j < 5; j ) {
if (youth[j] > avg) {
System.out.println("Youth " j " is above average");
} else {
System.out.println("Youth " j " below average");
}
}
}
public static void main(String[] args) {
new Stackoverflow().newspaper();
}
}
Ответ №3:
Вам нужно сохранить числа во временном списке и использовать счетчик ‘ctr’ для увеличения значений соответствующего регистра. Я использовал для каждого цикла для простоты.
public void newspaper() {
System.out.println("Question 4 n");
int youth;
double avg = 0;
int sum = 0;
int numYouth = 5;
List<Integer> number = new ArrayList<>();
// The loop for calculating the average
int ctr = 0;
for (int i = 0; i < 5; i ) {
System.out.println("Youth " ctr " How many was delivered?");
youth = in.nextInt();
number.add(youth);
sum = sum youth;
avg = sum / numYouth;
}
System.out.println("Average is: " avg "n");
ctr = 0;
// The loop for checking below of above average
for (int j : number) {
if (j > avg) {
System.out.println("Youth " ctr " is above average");
} else {
System.out.println("Youth " ctr " below average");
}
}
}
Ответ №4:
Предполагая, что вы пытаетесь «найти среднее значение всех чисел, введенных пользователем, сохраняя эти числа, чтобы проверить, падает ли каждое из введенных чисел ниже или выше среднего, которое было рассчитано», ниже приведены вещи, которые вам нужно исправить:
- Часть «хранение этих чисел»
- Сравните вычисленное среднее значение с сохраненным числом.
Возможное решение:
- Используйте список или массив для хранения чисел, введенных пользователем.
- Вы можете использовать массив, если знаете количество элементов для хранения, прежде чем начинать считывать числа.
-
Считывайте значения из списка / массива, когда вы хотите сравнить введенное значение с вычисленным средним.
public void newspaper() { System.out.println("Question 4 n"); int youth; double avg =0; int sum = 0; int numYouth = 5; // Create a list to store the entered values // List<Integer> enteredNumbers = new ArrayList<Integer>(); // Using an array of '5' elements - this 5 comes from numYouth int[] enteredNumbers = new int[numYouth]; // better not to 'hardcode' //The loop for calculating the average for (int i = 1; i <= numYouth; i ) { System.out.println("Youth " i " How many was delivered?"); youth = in.nextInt(); enteredNumbers[i-1] = youth; // array is 0-indexed sum = sum youth; avg = sum / numYouth; } System.out.println("Average is: " avg "n"); // an int is enough to track the number of values above the average int aboveAvg = 0; //The loop for checking below of above average for (int j = 1; j <= numYouth; j ) { // compare stored value against the average calculated above if(enteredNumbers[j-1] > avg) // array is 0-indexed { System.out.println("Youth " j " is above average"); aboveAvg ; } else { System.out.println("Youth " j " below average"); } } System.out.println(aboveAvg " Youths are above average");
}
Комментарии:
1. ДА. вы правы. Теперь я изменил решение, чтобы вместо него использовать массив — поскольку arraylist кажется излишним, когда у нас есть
numYouth
значение.2. Теперь я все прекрасно понимаю. Спасибо