Java计算器变量

问题描述 投票:-4回答:2
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

请用英语,我不明白你是否觉得它听起来很复杂。

再次感谢你。

java variables methods declaration
2个回答
0
投票

程序以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

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

// 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方法有一个返回类型,为什么?你不使用它,然后你不需要它。如果你想使用它,你不应该把结果扔掉

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() { ... }
}

如果你想能够调用drinkeat你首先需要创建一些Human实例像

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

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

这些方法特定于实例。所以john可能仍然口渴,因为我们只在drink上打电话给abigailstatic方法并非特定于实例。如果我们添加以下方法

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

它可能只能返回人的平均智商,而不是john的智商。该方法对john等实例一无所知,即使我们尚未创建像john这样的实例,我们也可以调用它。这也是为什么我们应该指出调用static方法的原因

Human.getIQ();

而不是

john.getIQ();

不幸的是,第二种变体是可能的,并且可以编译。但是由于调用没有在john上执行,所以很困惑。

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


0
投票

在main方法中,您调用一些方法并传递x和y,您还没有声明x和为什么意味着什么。

你应该首先声明变量,然后对编译器'x'另外使用它们,并且'y'在你声明它们的类型之前没有任何意义。

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

double x = 0.0;
double y = 0.0;

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

希望你明白了。

© www.soinside.com 2019 - 2024. All rights reserved.