类方法java的静态引用错误

时间:2017-06-25 09:45:10

标签: java

java新手。不明白错误。基本上尝试返回值然后确定输出但是错误"不能对非静态字段进行静态引用出现在第13行和第34行;在班级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();        
         }
    }

}

Class 运算符

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;
    }

}

2 个答案:

答案 0 :(得分:0)

正如错误消息所示:从静态上下文(您的静态主函数)中,您无法引用非静态变量(输入)。 您可以通过使输入静态来修复它,i。即声明如下:

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

答案 1 :(得分:0)

我花了五分钟更改(重构)你的代码。有一些简单的错误。我已将所有内容都移到一个类中,并添加了一些注释。

可以做出很多改进。但这完全归功于实践和经验:

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