为什么我的阵列不起作用?
Why doesn't my array work?
我是 java 的新手(现在只用了 2 天),我正在尝试制作一个 class 让你输入三个数字,然后输出平均值所有三个。当代码是这样时,输出总是等于 0,我不知道为什么?如果我将 add "static" 更改为所有 public 整数,我就能让它工作,但为什么我必须这样做?有没有另一种方法可以在不使它们静态化的情况下做到这一点?
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
因为你从来没有初始化你的 num
(s),你在 get
(s) 上分配给他们你从来没有调用 - 而且你我正在尝试将它们设置为 get
(s),这不是常规方法。
public int num1 = 3;
public int num2 = 3;
public int num3 = 3;
你应该得到 3。getter 应该看起来像
public int getNum1()
{
return num1;
}
一个setter应该看起来像
public void setNum1(int num1) {
this.num1 = num1;
}
然后您通常会将 class 命名为 Lettuce
并从 main
调用它,例如
Lettuce lettuce = new Lettuce();
lettuce.setNum1(10);
System.out.println(lettuce.getNum1());
您通常也会制作您的字段 private
并通过您的增变器和访问器方法(getters 和 setters)访问它们
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;
}
您还可以使用类似
的方法计算 "lettuce" 的平均值
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:static
修饰符指定您无需实例化 Class 即可使用该属性(变量或方法)。
例如,如果您有一个带有一个静态变量的 class:
public class Clazz {
static int variable=1;
}
您可以在不创建 Clazz 实例的情况下调用它。 System.out.println(Clazz.variable);
编译没有问题。
否则,non-static
属性将需要访问 Clazz 的 实例:
Clazz instanceOfClazz = new Clazz();
System.out.println(instanceOfClazz.variable);
2:类型int
是native
。因此,当您创建数组时,您没有传递任何值,并且在读取输出后,您的数组没有更新。
3: double 变量存储平均结果会更精确
4:最后但并非最不重要的一点是,您的 getNum 方法可以合并为仅 1 个接收消息作为参数的方法,因此您可以最好、最清楚地重用代码。这可以是 static
因为它不需要与 class Lettuce 的任何对象交互(将接收作为执行所需的所有参数和 return 用户发送的整数,你可以在方法外调用 return)
Ps.: 根据符号,class 名称应以大写字母开头。
你的最终 class 这样看起来会更好:
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();
}
}
希望对您有所帮助。
我是 java 的新手(现在只用了 2 天),我正在尝试制作一个 class 让你输入三个数字,然后输出平均值所有三个。当代码是这样时,输出总是等于 0,我不知道为什么?如果我将 add "static" 更改为所有 public 整数,我就能让它工作,但为什么我必须这样做?有没有另一种方法可以在不使它们静态化的情况下做到这一点?
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
因为你从来没有初始化你的 num
(s),你在 get
(s) 上分配给他们你从来没有调用 - 而且你我正在尝试将它们设置为 get
(s),这不是常规方法。
public int num1 = 3;
public int num2 = 3;
public int num3 = 3;
你应该得到 3。getter 应该看起来像
public int getNum1()
{
return num1;
}
一个setter应该看起来像
public void setNum1(int num1) {
this.num1 = num1;
}
然后您通常会将 class 命名为 Lettuce
并从 main
调用它,例如
Lettuce lettuce = new Lettuce();
lettuce.setNum1(10);
System.out.println(lettuce.getNum1());
您通常也会制作您的字段 private
并通过您的增变器和访问器方法(getters 和 setters)访问它们
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;
}
您还可以使用类似
的方法计算 "lettuce" 的平均值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:static
修饰符指定您无需实例化 Class 即可使用该属性(变量或方法)。
例如,如果您有一个带有一个静态变量的 class:
public class Clazz {
static int variable=1;
}
您可以在不创建 Clazz 实例的情况下调用它。 System.out.println(Clazz.variable);
编译没有问题。
否则,non-static
属性将需要访问 Clazz 的 实例:
Clazz instanceOfClazz = new Clazz();
System.out.println(instanceOfClazz.variable);
2:类型int
是native
。因此,当您创建数组时,您没有传递任何值,并且在读取输出后,您的数组没有更新。
3: double 变量存储平均结果会更精确
4:最后但并非最不重要的一点是,您的 getNum 方法可以合并为仅 1 个接收消息作为参数的方法,因此您可以最好、最清楚地重用代码。这可以是 static
因为它不需要与 class Lettuce 的任何对象交互(将接收作为执行所需的所有参数和 return 用户发送的整数,你可以在方法外调用 return)
Ps.: 根据符号,class 名称应以大写字母开头。
你的最终 class 这样看起来会更好:
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();
}
}
希望对您有所帮助。