Java 计算器变量

Java Calculator Variable

package com.company;

import java.util.Scanner;

public class javaCalculator {


public static void main(String[] args) {
    setNumbers(x,y);//---->>>>Problem
    addNumbers(x,y);//---->>>Problem
    multiplyNumbers(x,y);//---->>>Problem

}



public static double[] setNumbers(double x, double y) {

    Scanner set = new Scanner(System.in);

    double[] inputs = new double[2];
    System.out.println("Enter First Number");

    x = inputs [0] = set.nextDouble();
    System.out.println("Enter Second Number");
    y =  inputs [1] = set.nextDouble();
    return inputs;

}


 public static double addNumbers(double x, double y){

   double addition = x+y;
   System.out.println(addition);
    return addition;
 }

public static double multiplyNumbers(double x, double y){

    double multiply = x+y;
    System.out.println(multiply);
    return multiply;
}

}

问题是它说 x 和 y 没有初始化。

我不知道该怎么做,我在 setNumbers 中声明了它们并想将它们用于加法和乘法。

如果我在 main 中再次声明它们,那么 x 和 y 的值将是 0,这对我没有帮助。

谢谢。

我也是 java 的新手。有人可以解释为什么我的软件 intelliJ 也说要使用

   static//--->>in all the name of the methods

请用英文,说的复杂我听不懂

再次感谢。

程序main方法中开始执行。 Java执行的第一条语句是

setNumbers(x,y);

那时你没有定义任何 xy 变量。因此错误。

注意method(x, y)意味着你想调用一个方法并在途中给它额外的信息,两个变量。所以你需要提供像

这样的变量
double x = 1;
double y = 2;
setNumbers(x, y);

然后将使用这些参数调用该方法。但是,您的 setNumbers 方法似乎没有以任何方式使用变量,您只是尝试覆盖它们:

x = inputs [0] = set.nextDouble();
y =  inputs [1] = set.nextDouble();

这对程序没有影响,因为方法内部的 xy 不再连接到世界之外的范围,Java 是 pass by value.

如果您希望该方法分配两个变量然后在以后使用它们,您应该在不带参数的情况下调用它,然后 return 值:

// In main method
double[] numbers = setNumbers();
double x = numbers[0];
double y = numbers[1];

// setNumbers method
public static double[] setNumbers() {
    double[] input = new double[2];
    input[0] = ...
    input[1] = ...

    return input;
}

接下来,您的 addNumbersmultipleNumbers 方法有一个 return 类型 ,为什么?你不使用它,那么你就不需要它。如果你想使用它,你不应该像

那样丢弃结果
double resultAdd = addNumbers(x, y);
double resultMult = multiplyNumbers(x, y);

System.out.println("Result of x + y = " + resultAdd);
System.out.println("Result of x * y = " + resultMult);

Can someone explain why my software intelliJ also says to use static in all the name of the methods?

您的程序执行从 main 方法开始,一个 static 方法。那时没有创建任何对象。 static 表示某些东西 未绑定 到特定对象实例。如果您希望能够调用 non-static 方法,您首先需要创建对象实例。想象一个 class 像

public class Human() {
    public void drink() { ... }
    public void eat() { ... }
}

如果您希望能够调用 drinkeat,您首先需要创建一些 Human 实例,例如

Human john = new Human();
Human abigail = new Human();

john.eat();
abigail.drink();

方法特定于实例。所以 john 可能仍然口渴,因为我们只在 abigail 上调用了 drinkstatic 方法不特定于实例。如果我们添加下面的方法

public class Human {
    public static void getIQ() { ... }
}

它可能只能return人的平均智商,而不是john的智商。该方法对像 john 这样的实例一无所知,即使我们还没有创建像 john 这样的实例,我们也可以调用它。这也是为什么我们应该指示调用 static 方法,例如

Human.getIQ();

而不是

john.getIQ();

不幸的是,第二个变体是可能的并且可以编译。但由于调用未执行 on john.

在您的代码示例中,由于您没有创建 classes 的任何实例,因此您需要 static 方法来调用它们。

在 main 方法中你正在调用一些方法并传递 x 和 y,你还没有声明 x 的含义和原因。

您应该先声明变量,然后以其他方式为编译器使用它们 'x' 并且 'y' 在您声明它们的类型之前没有任何意义。

在编程中,我们声明变量并为它们分配默认值,例如

double x = 0.0;
double y = 0.0;

在您的代码中,只需如上所述分配默认值,然后扫描仪输入将随后分配给它们。

希望你明白了。