2016-09-19 2 views
1

это мой кодрасчета максимальных и средних входных чисел

import java.util.*; 
public class testq 
{ 
    public static void main (String [] args) 
    { 
     int max = 0; 
     int sum = 0; 
     int count = 0; 
     int age, maximum; 
     double average; 

     Scanner sc = new Scanner(System.in); 
     age = sc.nextInt(); 
     while (age != 0) 
     { 
      System.out.println("enter age"); 
      age = sc.nextInt(); 

      if (age < 0 && age > 120) 
      { 
       System.out.println("enter numbers between 1 to 120"); 
       age = sc.nextInt(); 
      } 

      else 
      { 
       count ++; 
       sum = sum + age; 
       maximum = getMax(max, age); 
       average = getAve(sum, count); 
      } 
     } 
     System.out.println(" max is" + max + "average is" + average); 

    } 

    public static int getMax (int max, int age) 
    { 
     if (max < age) 
     { 
      max = age; 
     } 
     return max; 
    } 

    public static double getAve (int sum, int count) 
    { 
     double average; 
     average = (double)sum/(double)count; 
     return average; 
    } 
} 

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

«средний, возможно, не был инициализирован»

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

редактировать *

мой код выглядит, как это сейчас

import java.util.*; 
public class testq 
{ 
    public static void main (String [] args) 
    { 
     int max = 0; 
     int sum = 0; 
     int count = 0; 
     int age, maximum; 
     double average; 

     Scanner sc = new Scanner(System.in); 
     System.out.println("enter age"); 
     age = sc.nextInt(); 
     while (age != 0) 
     { 
      System.out.println("enter age"); 
      age = sc.nextInt(); 

      if (age < 0 || age > 120) 
      { 
       System.out.println("enter numbers between 1 to 120"); 
       age = sc.nextInt(); 
      } 

      else 
      { 
       count ++; 
       sum = sum + age; 
      } 
     } 
     maximum = getMax(max, age); 
     average = getAve(count, sum); 
     System.out.println(" maximum is " + max + "average is " + average); 

} 

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

enter age 
-10 
enter age 
-10 
enter numbers between 1 to 120 
-10 
enter age 
-10 
enter numbers between 1 to 120 
0 

я хотел из положить «ввести число от 1 до 120 EVERYTIME недействительного номера вводится

ив попытался изменить состояние пока к (возраст! = 0 & & возраст> = 1 & & возраст < = 120), но не работали

+0

Локальные переменные не имеют значений по умолчанию. Просто установите среднее значение по умолчанию на 0, чтобы начать с – Li357

+1

. Возможный дубликат [переменная, возможно, не была инициализирована] (http://stackoverflow.com/questions/36370042/variable-might-not-have-been-initialised) –

+0

У меня есть изменил код, который он компилирует сейчас, но у меня появилось больше проблем @AndrewL. –

ответ

0

Пожалуйста, используйте этот код это произведет ваш необходимый выход,

public static void main(String[] args) { 

     //int max = 0; 
     int sum = 0; 
     int count = 0; 
     int age, maximum=0; 
     double average= 0; 

     Scanner sc = new Scanner(System.in); 
     do { 
      System.out.println("enter age"); 
      age = sc.nextInt(); 

      if (age <0||age > 120) 
      { 
       System.out.println("enter numbers between 1 to 120"); 
       //age = sc.nextInt(); 
      } 

      else 
      { 
       count ++; 
       sum = sum + age; 
       maximum = getMax(maximum, age); 
           } 
     }while(age != 0); 
     average = getAve(sum, count); 
     System.out.println("max is" + maximum + "\naverage is" + average); 

    } 

    public static int getMax (int max, int age) 
    { 
     if (max < age) 
     { 
      max = age; 
     } 
     return max; 
    } 

    public static double getAve (int sum, int count) 
    { 
     double average; 
     average = (double)sum/(double)count; 
     return average; 
    } 

Выход:

enter age 
3 
enter age 
6 
enter age 
3 
enter age 
120 
enter age 
121 
enter numbers between 1 to 120 
enter age 
500 
enter numbers between 1 to 120 
enter age 
6 
enter age 
0 
max is120 
average is23.0 

Следующие изменения были внесены в код,

  • сделать в то время как цикл используется вместо цикла while.
  • Вы передаете max как аргумент для getMax(), но вам нужно передать максимум как аргумент.
  • Double инициализируется 0.

Если у вас есть какой-либо запрос, пожалуйста, прокомментируйте ниже.

+0

Вы вычисляете среднее значение каждой итерации, лучше сделать это один раз в конце. – Mark

+0

Thanx @Mark Я обновил код. :) –

+0

np, что такое 'int max = 0;' for? – Mark

0

Значение average не устанавливается в каждом логическом пути через метод main() , следовательно, предупреждение.

Вы должны, вероятно, инициализируется, когда вы объявляете его, например:

double average = 0.0; 

В качестве альтернативы, вы можете воспользоваться тем, вам не нужно повторно вычислить среднее значение каждый раз, хотя ваш while цикла. Если вы объявите и вычислите его только один раз, после цикла, значение всегда будет установлено.

+0

изменен код, но у iive появилось больше проблем, можете ли вы взглянуть на него, пожалуйста? @dave –

1

Возможна немедленная ввод 0, и среднее значение никогда не будет установлено. Поэтому было бы ошибкой при попытке распечатать его. Вы можете перенести свой вызов на getAve() прямо перед оператором печати (и из цикла while), так как вам нужно только позвонить ему один раз.

average = getAve(sum, count); 
    System.out.println(" max is " + max + " average is " + average); 

Кроме того, я предполагаю, что вы должны использовать «или» в вашем состоянии вместо «и».

if (age < 0 || age > 120) 

вместо:

if (age < 0 && age > 120) 

Это было бы невозможно по возрасту быть меньше нуля и больше, чем 120.

+0

изменен код, но еще больше проблем @jconra –

+0

Ответ Karthi должен работать на вас. Я не хотел, чтобы вы вышли из getMax() из цикла while. Он должен быть в вашей петле, чтобы работать. Я по-прежнему считаю, что неплохо иметь getAve() прямо перед оператором печати, поскольку его нужно только один раз вызывать. Похоже, когда вы дали его -10, он не принял его, потому что он следовал по пути, который напечатал «введите числа от 1 до 120». Поэтому он не увеличивал количество или сумму. Одна вещь, которая может помочь решить проблемы, заключается в том, чтобы печатать счетчик и суммировать каждый раз, когда он петли, пока он не работает. – jconra

0

У вас есть метод

public static double getAve (int sum, int count) 

но вы используете

average = getAve(count, sum); 

так что ваши аргументы в обратном порядке.

Вторая проблема заключается в том, что вы используете max здесь

maximum = getMax(maximum, age); 

и здесь

System.out.println(" maximum is " + max 

но ваше реальное значение maximum, поэтому переключатель, который тоже.

Смежные вопросы