Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';我的阵列不行吗?_Java_Arrays_Java.util.scanner - Fatal编程技术网

Java 为什么';我的阵列不行吗?

Java 为什么';我的阵列不行吗?,java,arrays,java.util.scanner,Java,Arrays,Java.util.scanner,我对java非常陌生(现在只使用了2天),我正在尝试创建一个类,让您输入三个数字,然后输出所有三个数字的平均值。当代码是这样时,输出总是等于0,我不知道为什么?如果我对所有公共整数加上“static”,我就可以让它工作,但为什么我必须这样做呢?有没有其他方法可以不让它们静止 import java.util.Scanner; public class lettuce { public int num1; public int num2; public int num3; public st

我对java非常陌生(现在只使用了2天),我正在尝试创建一个类,让您输入三个数字,然后输出所有三个数字的平均值。当代码是这样时,输出总是等于0,我不知道为什么?如果我对所有公共整数加上“static”,我就可以让它工作,但为什么我必须这样做呢?有没有其他方法可以不让它们静止

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();   
}
import java.util.Scanner;
公共级生菜
{
公共int num1;
公共国际单位m2;
公共int num3;
公共静态void main(字符串参数[])
{
莴苣莴苣对象=新莴苣();
int-total=0;
整数平均;
int数组[]={lettuceObject.num1,lettuceObject.num2,lettuceObject.num3};
lettuceObject.getNum1();
System.out.println(lettuceObject.num1);
System.out.println(数组[0]);
lettuceObject.getNum2();
System.out.println(lettuceObject.num2);
System.out.println(数组[1]);
lettuceObject.getNum3();
System.out.println(lettuceObject.num3);
System.out.println(数组[2]);
for(int counter=0;counter

}

输出为
0
,因为您从未初始化过
num
,您在
get
(s)上为它们赋值,而您从未调用过该方法-您试图在
get
(s)中设置它们,这不是惯用的方法

public int num1 = 3;
public int num2 = 3;
public int num3 = 3;
你应该得到3分。一个getter应该看起来像

public int getNum1()
{
    return num1;
}
public void setNum1(int num1) {
    this.num1 = num1;
}
二传手应该像

public int getNum1()
{
    return num1;
}
public void setNum1(int num1) {
    this.num1 = num1;
}
然后你会习惯性地将你的类命名为
莴苣
,并从
main
像这样调用它

Lettuce lettuce = new Lettuce();
lettuce.setNum1(10);
System.out.println(lettuce.getNum1());
您还可以习惯性地将字段
设置为私有
,并通过mutator和accessor方法(getter和setter)访问它们

您可以选择创建一个构造函数

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:
static
修饰符指定不需要实例化类来使用该属性(变量或方法)。 例如,如果您有一个带有一个静态变量的类:

public class Clazz {
   static int variable=1;
}
您可以在不创建Clazz实例的情况下调用它<代码>System.out.println(Clazz.variable)编译时不会出现任何问题。 否则,
非静态
属性将需要访问Clazz的实例

Clazz instanceOfClazz = new Clazz();
System.out.println(instanceOfClazz.variable);
2:类型
int
native
。因此,在创建数组时,不传递任何值,并且在读取输出后,数组不会更新

3:双变量更精确地存储平均值的结果

4:最后但并非最不重要的一点是,您的getNum方法可以合并为仅接收消息作为参数的一个方法,因此您可以获得最佳且明确的代码重用。这可以是
静态的
,因为它不需要与类的任何对象交互(使用receive作为参数,它需要执行并返回用户发送的整数,您可以在方法之外分配返回)

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

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

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();
}
}
import java.util.Scanner;
公共级生菜
{
公共int num1;
公共国际单位m2;
公共int num3;
公共静态void main(字符串参数[])
{
莴苣莴苣对象=新莴苣();
int-total=0;
双倍平均;
lettuceObject.num1=lettuceObject.getNum(“请键入您的第一个数字:”);
System.out.println(lettuceObject.num1);
System.out.println(数组[0]);
lettuceObject.num2=lettuceObject.getNum(“请键入第二个数字:”);
System.out.println(lettuceObject.num2);
System.out.println(数组[1]);
lettuceObject.num2=lettuceObject.getNum(“请键入第三个数字:”);
System.out.println(lettuceObject.num3);
System.out.println(数组[2]);
int数组[]={lettuceObject.num1,lettuceObject.num2,lettuceObject.num3};
for(int counter=0;counter

希望这有帮助。

num1/2/3的值等于什么?它们等于用户输入的任何值。它要求用户输入3个数字,然后平均所有数字,用户从哪里获得输入?当它运行getNum1、getNum2、getNum3时,意味着将用户在“keyboard.nextInt()”处的输入分配给num1 num2,Num3没有看到getNum方法。感谢您的快速响应!这帮了大忙。但是,如果我将所有公共整数更改为“static”,即“public static int num1;”,并将“int array[]={莴苣.num1,莴苣.num2,莴苣.num3};”更改为“int array[]={num1,num2,num3};”,然后将其移动到getNum()3行下面,它会开始工作吗?对不起,如果这不是