2014-12-12 1 views
0

Я смущаю себя здесь. Моя цель состояла в том, чтобы создать простую программу, которая приняла количество значений, которые пользователь хочет усреднить, сохранить их в массиве (при их объединении) и, наконец, дать среднее значение этих чисел.Как передать эти целые числа методу под ним?

Моя вещь: я пытаюсь понять концепцию нескольких классов и методов, поскольку я новичок, поэтому я попытался использовать другой класс, просто выполняю всю работу, в то время как основной класс просто создал объект из другого класса , а затем запустить их методы. Возможно, я спрашиваю что-то невозможное. Взгляните на мой код.

Это мой Основной класс:

public class Main 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Please enter numbers to average together"); 

     OtherClass averages = new OtherClass(); 
     averages.collectNumbers(); 
     averages.AverageNumbers(); 
    } 
} 

Теперь я не уверен, что если что-то в этих параметрах, или если я могу даже использовать «averages.AverageNumbers();» не создавая другого объекта с помощью «OtherClass», называемого чем-то другим? Я уверен, что это законно.

Вот мой другой класс для этого проекта под названием «OtherClass»

import java.util.Scanner; 

public class OtherClass // using this to name obj 
{ 
    public void collectNumbers() //name of our method that does things 
    { 
     Scanner sc = new Scanner(System.in); 

     System.out.println("how many integers would you like to average? "); 
     int givenNum = sc.nextInt(); 
     System.out.println("Alright, I will average " + givenNum + " values. \nPress enter after each:"); 

     int[] numCollect = new int[givenNum]; 
     int sum = 0; 
     for (int i = 0; i < numCollect.length; i++) 
     { 
      numCollect[i] = sc.nextInt(); 
      sum = sum + numCollect[i]; 
     } 
     System.out.println(sum); 


    } 
    public int AverageNumbers(int givenNum, int sum) 
    { 
     int average = sum/givenNum; 
     System.out.println(average); 
     return average; 
    } 
} 

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

ответ

3

Это будет работать, если вы укажете sum и givenNum как поля вашего OtherClass, а не как локальные переменные. Таким образом, перед методом collectNumbers, написать

private int sum; 
private int givenNum; 

и удалить объявления этих двух переменных внутри collectNumbers. Так, например, вместо

int givenNum = sc.getInt(); 

вы просто

givenNum = sc.getInt(); 

, так как переменная уже существует. Также изменить объявление метода averageNumbers к

public int averageNumbers() 

, потому что вам больше не нужно передавать эти два значения для этого метода.

Это архетипический пример использования объектов класса для переноса небольшого количества данных, а не просто использования класса в качестве способа объединения методов вместе. Два метода этого класса работают с sum и givenNum, поэтому имеет смысл хранить их в каждом объекте этого класса.

Наконец, в вашем методе averageNumbers у вас есть целочисленное деление, которое автоматически округляется вниз. Вы, вероятно, хотите деление с плавающей точкой, вместо этого, чтобы вы могли написать

double average = (double) sum/givenNum; 

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

+0

Большое вам спасибо! Это сработало.Теперь я понимаю, что обе эти переменные принадлежат к моему классу OtherClass. Можете ли вы объяснить мне, что мои переменные должны быть частными сейчас? – jpX

+0

Ну, они НЕ должны быть «частными», но это хорошая практика, чтобы создать поле или метод 'private', если он не будет использоваться вне класса, где он объявлен. Есть много причин для этого, но одна из веских причин заключается в том, что если вы столкнулись с проблемой, когда одна из этих переменных не имеет того значения, которое вы ожидаете от нее, вам нужно только посмотреть в ОДНОМ классе для своего проблема, а не вся программа. –

+0

Понял. Это может быть слишком много, чтобы спросить вас, но как бы вы сделали эту программу? Очевидно, как кто-то более опытный, чем я, вы знаете намного больше. Я знаю, что это простая программа усреднения, но мне любопытно узнать. (Может быть, просто объяснение, не ожидая, что вы закодируете мне целую программу :)). Спасибо за помощь! – jpX