2015-01-08 4 views
2

Я очень новичок в java (только использовал его уже 2 дня), и я пытаюсь создать класс, который позволяет вводить три числа, а затем выводит среднее из всех трех. Когда код такой, выход всегда равен 0, и я не знаю почему? Я могу заставить его работать, если я изменю добавление «статического» ко всем целым числам, но зачем мне это делать? Есть ли другой способ сделать это, не делая их статичными?Почему мой массив не работает?

import java.util.Scanner; 

public class lettuce 
{ 
public int num1; 
public int num2; 
public int num3; 

public static void main(String args[]) 
{ 

    lettuce lettuceObject = new lettuce(); 

    int total = 0; 
    int average; 


    int array[] = {lettuceObject.num1,lettuceObject.num2,lettuceObject.num3}; 

    lettuceObject.getNum1(); 
    System.out.println(lettuceObject.num1); 
    System.out.println(array[0]); 
    lettuceObject.getNum2(); 
    System.out.println(lettuceObject.num2); 
    System.out.println(array[1]); 
    lettuceObject.getNum3(); 
    System.out.println(lettuceObject.num3); 
    System.out.println(array[2]); 


    for(int counter = 0; counter < array.length;counter++) 
    { 
     total = total + array[counter]; 
    } 
    average = total/array.length; 

    System.out.println("The average of the three numbers is: " + average); 



} 

public int getNum1() 
{ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Please type your first number: "); 
    return num1 = keyboard.nextInt(); 
} 
public int getNum2() 
{ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Please type your second number: "); 
    return num2 = keyboard.nextInt(); 
} 
public int getNum3() 
{ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Please type your third number: "); 
    return num3 = keyboard.nextInt(); 
} 

}

+0

Что делает 'num1/2/3'equal? – Hayden

+0

они равны всем входным данным пользователя. он запрашивает у пользователя ввод трех чисел, а затем он должен усреднить все из них –

+0

И где пользователь получает вход? – Hayden

ответ

1

Выход 0, потому что вы никогда не инициализируется ваш num (s), вы присваиваете им на get (ы), которые вы никогда не называют - и вы пытаетесь установить их в get (s), которые не являются обычным подходом.

public int num1 = 3; 
public int num2 = 3; 
public int num3 = 3; 

И вы должны получить 3. поглотитель должен выглядеть

public int getNum1() 
{ 
    return num1; 
} 

Установщик должен выглядеть

public void setNum1(int num1) { 
    this.num1 = num1; 
} 

И тогда вы обычно называют свой класс Lettuce и вызывать его из main

Lettuce lettuce = new Lettuce(); 
lettuce.setNum1(10); 
System.out.println(lettuce.getNum1()); 

Вы бы обычно также сделать ваши поля private и доступ к ним через ваши мутаторов и аксессоры методы (методы получения и установки)

private int num1; 
private int num2; 
private int num3; 

Вы можете выбрать, чтобы создать конструктор

public Lettuce(int num1, int num2, int num3) { 
    this.num1 = num1; 
    this.num2 = num2; 
    this.num3 = num3; 
} 

Можно также вычислить в среднем от "салата" с чем-то вроде

public double average() { 
    return (num1 + num2 + num3)/3.0; 
} 

Edit

Пожалуйста, не редактируйте свой вопрос так. Кроме того, рассмотрите порядок ваших операций. Ваши методы get - это то, что задает значения. Поэтому назовите их, прежде чем создавать массив!

lettuceObject.getNum1(); 
lettuceObject.getNum2(); 
lettuceObject.getNum3(); 
// Each of those values is 0 until you call the previous three lines. 
int array[] = {lettuceObject.num1,lettuceObject.num2,lettuceObject.num3}; 
System.out.println(array[0]); 
System.out.println(array[1]); 
System.out.println(array[2]); 
+0

Спасибо за быстрый ответ! Это очень помогло. Однако, как это происходит, если я изменил все общедоступные целые вещи на «статические», т.е. \t "public static int num1;" и изменить «int array [] = {lettuce.num1, lettuce.num2, lettuce.num3};" to "int array [] = {num1, num2, num3};" а затем переместите его ниже линии getNum() 3, он начнет работать? Извините, если это не код и все, я очень новичок в переполнении стека. –

+0

Пришлось отредактировать мой ответ извините! –

+0

@AaronBarnard Вы редактировали свой вопрос. Прочтите обновленный ответ выше. Кроме того, попробуйте и подумайте о порядке ваших звонков. –

0

Поскольку вы новичок, я дам вам еще несколько советов, которые они делают эту работу.

1: Модификатор static указывает, что вам не нужно вводить в действие класс для использования этого атрибута (переменной или метода). Например, если у вас есть класс с одной статической переменной:

public class Clazz { 
    static int variable=1; 
} 

Вы можете назвать это без создания экземпляра Clazz. System.out.println(Clazz.variable); будет скомпилирован без проблем. В противном случае атрибут non-static потребуется Instance из Clazz будет доступ:

Clazz instanceOfClazz = new Clazz(); 
System.out.println(instanceOfClazz.variable); 

2: Тип int является native.Итак, когда вы создаете свой массив, вы не передаете никаких значений, и после прочтения вывода ваш массив не обновляется.

3: двойная переменная была бы более точной, чтобы хранить результат среднего значения.

4: последнее, но не менее важное: метод getNum может быть объединен только с одним методом, получающим сообщение в качестве параметра, поэтому вы получите лучшее и четкое повторное использование кода. Это может быть static, потому что ему не нужно взаимодействовать с каким-либо объектом класса Lettuce (с получением в качестве параметра всего, что ему нужно выполнить, и возврата целого числа, отправленного пользователем, вы можете определить возврат вне метода)

Псс .: по обозначению имя класса должно начинаться с заглавной буквы.

Вашего последний класс будет выглядеть лучше, так:

import java.util.Scanner; 

public class Lettuce 
{ 
public int num1; 
public int num2; 
public int num3; 

public static void main(String args[]) 
{ 

    Lettuce lettuceObject = new Lettuce(); 

    int total = 0; 
    double average; 



    lettuceObject.num1 = lettuceObject.getNum("Please type your first number: "); 
    System.out.println(lettuceObject.num1); 
    System.out.println(array[0]); 
    lettuceObject.num2 = lettuceObject.getNum("Please type your second number: "); 
    System.out.println(lettuceObject.num2); 
    System.out.println(array[1]); 
    lettuceObject.num2 = lettuceObject.getNum("Please type your third number: "); 
    System.out.println(lettuceObject.num3); 
    System.out.println(array[2]); 


    int array[] = {lettuceObject.num1,lettuceObject.num2,lettuceObject.num3}; 
    for(int counter = 0; counter < array.length;counter++) 
    { 
     total = total + array[counter]; 
    } 
    average = total/array.length; 

    System.out.println("The average of the three numbers is: " + average); 



} 
public int getNum(String message) 
{ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println(message); 
    return keyboard.nextInt(); 
} 
} 

Надеется, что это помогло.

+0

спасибо за подсказку человеку, они действительно помогли объяснить некоторые вещи, которые я действительно не знал! –

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