2012-04-18 5 views
2

Я новичок в программировании, и я пытаюсь выяснить простую среднюю функцию. Я написал функцию в среднем 3 целых числа. Теперь я хотел бы иметь возможность использовать любой класс коллекции и любой класс чисел и получать среднее значение. Проблема заключается в том, что с этими классами вы не можете использовать + или/для получения среднего значения.Java Средние функции

Так что мне интересно, есть ли какие-либо рабочие условия, чтобы иметь возможность использовать эти два класса?

вот моя первая функция, которая работает:

package refresh; 
import java.util.*; 

public class Average { 
public static void main(String args[]){ 

    int a, b, c; 
    float average; 
    Scanner scanner = new Scanner(System.in); 
    System.out.println("Enter First Number"); 
    a = scanner.nextInt(); 
    System.out.println("Enter Second Number"); 
    b = scanner.nextInt(); 
    System.out.println("Enter Third Number"); 
    c = scanner.nextInt(); 
    average = (float)(a+b+c)/3; 
    System.out.println("The Average Is "+average); 
} 
} 

Вот что я до сих пор для моей проблемы:

package refresh; 
import java.util.*; 

public class Average { 
public static void main(String args[]){ 

    Collection numbers; 
    Number count; 
    Number average; 

    Scanner scanner = new Scanner(System.in); 
    System.out.println("Enter Numbers to be averaged"); 
    numbers = (Collection) scanner.match(); 
    count++; 
    average = numbers/count; 
    System.out.println("The Average Is "+average); 
} 
} 

Любая помощь будет здорово! Спасибо за ваше время!

+4

К сожалению, нет хорошего способа обойти трудности с помощью кнопок + и /. Вероятно, наилучшим вариантом является обход объекта с помощью методов 'plus' и' divide', который инкапсулирует + и/логику для определенного числового типа. –

+0

Если вы используете double (Scanner.nextDouble), вы покрываете все числа. Что касается + и /, Адам уже посоветовал вам пойти с методами с подходящим именем. – Jayan

ответ

2

Нет смысла преобразовывать строку в число (это то, что делает сканер), если вы не знаете, какой номер вы пытаетесь преобразовать.

Вы можете представлять практически любое число в виде Double. Если вам нужна произвольная точность, используйте BigDecimal.

Код усреднения может быть полностью общим по интерфейсу Number; просто используйте метод doubleValue. Если вам нужен BigDecimal, то это сложнее, и вам, вероятно, нужно делать вещи с участием instanceof.

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