非静态变量输入和尝试运行方法的问题

时间:2017-10-24 23:15:10

标签: java

我已经做了很多研究试图解决这个问题(大约2.5小时),但我仍然无法编译我的程序。我试过让方法不是静态的,但是当试图运行它时,它给了我这个错误:

  

错误:主要方法在类prog6中不是静态的,请定义   main方法为:public static void main(String [] args)“

当main方法是静态的时,我在编译器中得到以下错误

  

错误:“无法从静态引用非静态变量输入   上下文             usd = input.nextDouble();“

如果这个问题多余,我很抱歉,我不是故意要求我自己寻找答案,但我现在已经在这工作了好几个小时了,我不明白我的意思我做错了。

此计划的一些额外信息:它意味着从用户那里获取输入,以找出他们想要转换成的货币,以及他们希望转换多少美元。然后,我会调用一个方法来进行计算并返回它们。 (任何试图转换超过200美元的金额都需要5%的费用。)

import java.util.Scanner;

public class prog6
{
    Scanner input = new Scanner(System.in);

    public static void main (String[] args)
    {
        char curr = 0;
        double usd;
        double result;

        while (curr!='Q' || curr!='q') {   //loop

            System.out.println("What type of currency would you like to buy?");
            curr = input.next().charAt(0);

            System.out.println("How many dollars would you like to convert?");
            usd = input.nextDouble();     //asking user for info needed to convert

            if (usd>200) {
                usd = (usd)*(0.95);
            }

            result = calc (curr,usd); //invoke the method
        }
    }

    public double calc (char mCurr,double mUsd) //method
    {
        if (mCurr=='E' || mCurr=='e') {
            return (mUsd)*(0.88);
        }

        else if (mCurr=='P' || mCurr=='p') {
            return (mUsd)*(0.77);
        }

        else if (mCurr=='Y' || mCurr=='y') {
            return (mUsd)*(113.17);
        }

        return 0;
    }
}

2 个答案:

答案 0 :(得分:0)

有两种方法可以解决您的问题

  1. input变量更改为static;
    1. main方法中,prog6 myprog= new prog6();并将input称为myprog.input ...

答案 1 :(得分:0)

主要方法需要是静态的。从那里,创建一个类的实例,并从静态main方法调用非静态方法。例如..

public class Prog6 {
    private Scanner input = new Scanner(System.in);

    public static void main (String[] args) {
        Prog6 prog6 = new Prog6();
        prog6.start();
    }

    public void start() {
      char curr = 0;
      double usd;
      double result;

      // etc...
    }
}

您可以将成员变量设为静态,但使用常规非静态成员和方法并使用静态main方法调用它是更好的形式。