java类方法的静态引用错误

java类方法的静态引用错误,java,Java,java新手。不理解错误。基本上是尝试返回值,然后确定输出,但在类bosscalc中出现错误“无法对非静态字段进行静态引用”。从运算符类返回值。请提供帮助。我已经在bosscalc类中指出了第13行。谢谢 package calculator; import java.util.Scanner; public class bosscalc { Scanner input = new Scanner(System.in); public static void main(S

java新手。不理解错误。基本上是尝试返回值,然后确定输出,但在类bosscalc中出现错误“无法对非静态字段进行静态引用”。从运算符类返回值。请提供帮助。我已经在bosscalc类中指出了第13行。谢谢

package calculator;

import java.util.Scanner;

public class bosscalc {

    Scanner input = new Scanner(System.in);

    public static void main(String args[]) {
        operators operatorobjects=new operators();
        String answer;

        System.out.println("What would you like to do? ");
        answer =input.nextLine();  -------------------------LINE 13

         if (answer=="a"){

             double adding = operatorobjects.add();          
             }

         if (answer=="s") {
             double subtrat = operatorobjects.sub();
         }


         if (answer=="m") {
             double multiply = operatorobjects.sub();        
         }
    }

}
运算符

package calculator;

import java.util.Scanner;

public class operators {

    double add() {
        double n1,n2,a;
        Scanner input=new Scanner(System.in);
        System.out.print("Enter number 1 ");
        n1=input.nextDouble();      

        System.out.print("Enter number 2 ");
        n2=input.nextDouble();;

        a=n1+ n2;
        return a;
    }

    double sub() {
        double n1,n2,d;
        Scanner input=new Scanner(System.in);
        System.out.print("Enter number 1 ");
        n1=input.nextDouble();      

        System.out.print("Enter number 2 ");
        n2=input.nextDouble();;

        d=n1 - n2;
        return d;
    }

    double m() {
        double n1,n2,m;
        Scanner input=new Scanner(System.in);
        System.out.print("Enter number 1 ");
        n1=input.nextDouble();      

        System.out.print("Enter number 2 ");
        n2=input.nextDouble();;

        m=n1/n2;
        return m;
    }

}

正如错误消息所说:从静态上下文(静态主函数)中,不能引用非静态变量(输入)。 您可以通过使输入为静态来修复它。E声明如下:

static Scanner input = new Scanner(System.in);

我花了五分钟修改(重构)你的代码。有几个简单的错误。我把所有的东西都放到了一个类中,并添加了一些注释

有很多可以改进的地方。但这完全取决于实践和经验:

import java.util.Scanner;

public class Operators {
    /**
    * add numbers
    * @return n1 + n2
    */
    double add() {
        double n1, n2, a;
        Scanner input = new Scanner(System.in);
        System.out.print("Enter number 1 ");
        n1 = input.nextDouble();

        System.out.print("Enter number 2 ");
        n2 = input.nextDouble();
        a = n1 + n2;
        return a;
    }

    /**
     * subtract numbers
     * @return n1 - n2
     */
    double sub() {
        double n1, n2, d;
        Scanner input = new Scanner(System.in);
        System.out.print("Enter number 1 ");
        n1 = input.nextDouble();

        System.out.print("Enter number 2 ");
        n2 = input.nextDouble();

        d = n1 - n2;
        return d;
    }

    /**
     * multiply numbers
     * @return n1 * n2
     */
    double multiply() {
        double n1, n2, m;
        Scanner input = new Scanner(System.in);
        System.out.print("Enter number 1 ");
        n1 = input.nextDouble();

        System.out.print("Enter number 2 ");
        n2 = input.nextDouble();

        m = n1 * n2;
        return m;
    }

    /**
     * divide numbers
     * @return n1 / n2
     */
    double divide() {
        double n1, n2, m;
        Scanner input = new Scanner(System.in);
        System.out.print("Enter number 1 ");
        n1 = input.nextDouble();

        System.out.print("Enter number 2 ");
        n2 = input.nextDouble();

        m = n1 / n2;
        return m;
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Operators operatorobjects = new Operators();
        String answer;

        System.out.println("What would you like to do? ");
        answer = input.nextLine();

        /**
         * String equality use String.equals()
         */
        if (answer.equals("a")) {

            double adding = operatorobjects.add();
            /**
             * Debug output println
             */
            System.out.println("adding = " + adding);

        } else if (answer.equals("s")) {

            double subtract = operatorobjects.sub();
            System.out.println("subtract = " + subtract);

        } else if (answer.equals("m")) {

            double multiply = operatorobjects.multiply();
            System.out.println("multiply = " + multiply);

        } else if (answer.equals("d")) {

            double divide = operatorobjects.divide();
            System.out.println("divide = " + divide);

        }
        /**
         * More debug exiting
         */
        System.out.println("exiting");
    }
}
我添加了一个divide方法,并重命名为multiply。运行的输出为:

What would you like to do? 
a
Enter number 1 10
Enter number 2 10
adding = 20.0
exiting


What would you like to do? 
s
Enter number 1 10
Enter number 2 2
subtract = 8.0
exiting

What would you like to do? 
m
Enter number 1 2
Enter number 2 5
multiply = 10.0
exiting

What would you like to do?  
d
Enter number 1 6
Enter number 2 3
divide = 2.0
exiting

欢迎来到堆栈溢出!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。在声明时使用
static Scanner input
,或者更好的做法是将扫描仪声明为
main()中的方法级变量。顺便说一下,我敢打赌你还有其他问题。
if(answer==“a”)
。。。我不会回答这个问题,因为代码中充满了错误。人们需要从某个地方开始。还记得你的第一个Java程序吗?:)谢谢你的努力。我向Tim道歉,代码不符合你的专业知识。正如我所说,我对这一点还不熟悉。