为什么我的阵列不工作?

时间:2015-01-08 03:41:28

标签: java arrays java.util.scanner

我是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();   
}

}

2 个答案:

答案 0 :(得分:1)

输出为0,因为您从未初始化过num(s),而是在get(s)上为您分配了一个您从未打过电话的人 - 而且您是试图在get(s)中设置它们,这不是习惯做法。

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

你应该得到3.一个吸气剂应该看起来像

public int getNum1()
{
    return num1;
}

setter应该看起来像

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

然后,您通常会将您的课程命名为Lettuce并从main调用

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

您通常也会创建字段private并通过mutator和accessor方法(getter和setter)访问它们

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;
}

修改

请不要像那样编辑你的问题。另外,请考虑您的运营顺序。您的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]);

答案 1 :(得分: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类的任何对象进行交互(使用receive作为参数执行它所需要的全部内容并返回用户发送的整数,你可以在方法之外返回)

Ps:用符号表示,类名应以大写字母开头。

你的最后一堂课会这样看起来更好:

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();
}
}

希望这会有所帮助。