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);
那时你没有定义任何x
或y
变量。因此错误。
请注意,method(x, y)
意味着您要调用方法并在途中为其提供附加信息,即两个变量。所以你需要提供像这样的变量
double x = 1;
double y = 2;
setNumbers(x, y);
然后用这些参数调用该方法。但是,你的setNumbers
方法似乎没有以任何方式使用变量,你只是尝试覆盖它们:
x = inputs [0] = set.nextDouble();
y = inputs [1] = set.nextDouble();
这对程序没有任何影响,因为方法中的x
和y
不再与世界范围内的范围相关联,Java就是pass by value。
如果您希望该方法分配两个变量,然后在以后使用它们,则应该在没有参数的情况下调用它,然后返回值:
// 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;
}
接下来,你的addNumbers
和multipleNumbers
方法有一个返回类型,为什么?你不使用它,然后你不需要它。如果你想使用它,你不应该把结果扔掉
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);
有人可以解释为什么我的软件intelliJ也说在方法的所有名称中使用
static
?
你的程序执行从main
方法开始,这是一种static
方法。此时不会创建任何对象。 static
表示某些东西未绑定到特定的对象实例。如果您希望能够调用非静态方法,则首先需要创建对象实例。想象一下这样的课程
public class Human() {
public void drink() { ... }
public void eat() { ... }
}
如果你想能够调用drink
或eat
你首先需要创建一些Human
实例像
Human john = new Human();
Human abigail = new Human();
john.eat();
abigail.drink();
这些方法特定于实例。所以john
可能仍然口渴,因为我们只在drink
上打电话给abigail
。 static
方法并非特定于实例。如果我们添加以下方法
public class Human {
public static void getIQ() { ... }
}
它可能只能返回人的平均智商,而不是john
的智商。该方法对john
等实例一无所知,即使我们尚未创建像john
这样的实例,我们也可以调用它。这也是为什么我们应该指出调用static
方法的原因
Human.getIQ();
而不是
john.getIQ();
不幸的是,第二种变体是可能的,并且可以编译。但是由于调用没有在john
上执行,所以很困惑。
在您的代码示例中,由于您没有创建任何类实例,因此需要使用static
方法来调用它们。
在main方法中,您调用一些方法并传递x和y,您还没有声明x和为什么意味着什么。
你应该首先声明变量,然后对编译器'x'另外使用它们,并且'y'在你声明它们的类型之前没有任何意义。
在编程中,我们声明变量并为它们分配默认值,例如
double x = 0.0;
double y = 0.0;
在您的代码中,只需如上所述分配默认值,然后将扫描仪输入分配给它们。
希望你明白了。