【问题标题】:Error: Main method not found in class Calculate, please define the main method as: public static void main(String[] args) [duplicate]错误:在类计算中找不到主方法,请将主方法定义为:public static void main(String[] args) [重复]
【发布时间】:2013-12-14 14:49:04
【问题描述】:

我需要有关 main 方法的帮助,我收到此错误:

Error: Main method not found in class Calculate, please define the main method as:
    public static void main(String[] args)

代码如下:

class Calculate {

private double fn;
private double sn;
private char op;

public void setNumber(double fnum, double snum){
    this.fn = fnum;
    this.sn = snum;
}
public double getNumber1(){
    return fn;
}
public double getNumber2(){
    return sn;
}
public void setOper(char oper){
    this.op = oper;
}
public char getOper(){
    return op;
}
public void getAnswer(){
    double ans;
    switch (getOper()){
        case 'a': {
            ans = add(getNumber1(), getNumber2());
            ansOutput(ans);
            break;
        }case 'b': {
            ans = sub (getNumber1(), getNumber2());
            ansOutput(ans);
            break;
        }case 'c': {
            ans = mul (getNumber1(), getNumber2());
            ansOutput(ans);
            break;
        }case 'd': {
            ans = div (getNumber1(), getNumber2());
            ansOutput(ans);
            break;
        }default:
            System.out.println("--------------------------");
            System.out.println("Invalid choice of operator");
            System.out.println("--------------------------");
        }
    }
    public static double add(double x,double y){
        return x + y;
    }
    public static double sub(double x, double y){
        return x - y;
    }
    public static double mul(double x, double y){
        return x * y;
    }
    public static double div(double x, double y){
        return x / y;
    }

    public static void ansOutput(double x){
        System.out.println("----------- -------");
        System.out.printf("the answer is %.2f\n", x);
        System.out.println("-------------------");
    }
}

【问题讨论】:

  • 运行时确切地告诉您该做什么 - 您是否尝试过按照它的说明进行操作? (当您运行程序时,您希望调用什么?)
  • 请再次阅读错误...
  • 我尝试输入“public static void main(String[] args)”,但运行代码后,它给了我很多错误,我想我必须更改“void”之类的。真的很抱歉,还是个学生。
  • 您在java 命令中命名的类必须包含一个main 方法,并具有规定的属性。这是您的程序开始执行的地方。 main 可以立即调用另一个方法,甚至另一个类,但是没有mainjava 命令不知道从哪里开始。
  • 您可能在没有关联方法体的情况下输入了“public static void main(String[] args)”。它是一种方法,就像您的setNumber 是一种方法一样。

标签: java methods main


【解决方案1】:

重启你的IDE,一切都会好起来的

【讨论】:

  • 有时最复杂的解决方案是最简单的步骤。 :)
  • 在我的例子中,eclipse的“运行方式”配置突然切换到一个新创建的类,半小时我不明白为什么它需要非主类中的主方法。虽然重启没有帮助,但你给了我检查 IDE 设置的线索。
  • 这也为我解决了这个问题:)
【解决方案2】:

来自docs

在 Java 编程语言中,每个应用程序都必须包含一个 main 方法,其签名是:

public static void main(String[] args)

修饰符 public 和 static 可以按任意顺序编写(public static 或 static public),但约定是使用 public static,如上所示。您可以为参数命名任何您想要的名称,但大多数程序员选择“args”或“argv”。

如你所说:

错误:缺少方法体,或声明抽象 public static void main(String[] args); ^ 这是我在类名后面添加后得到的

您可能还没有使用主体声明 main(因为 ';" 会在您的错误中暗示)。

你需要有一个带有主体的main方法,这意味着你需要添加{和}:

public static void main(String[] args) {


}

将它添加到你的类定义中。

虽然有时错误消息不是很清楚,但大多数时候它们包含足够的信息来指出问题所在。最坏的情况,您可以在互联网上搜索错误消息。此外,文档真的很有帮助。

【讨论】:

    【解决方案3】:

    我的建议:

    • 保持程序模块化。将Calculate 类保存在单独的Calculate.java 文件中,并创建一个调用main 方法的新类。这将使代码可读。
    • 要设置数字中的值,请使用构造函数。不要像上面使用的方法那样使用:

      public void setNumber(double fnum, double snum){ 这个.fn = fnum; this.sn = snum; }

      构造函数的存在是为了初始化对象。这是他们的工作,他们很擅长。

    • Calculate 类成员的 Getter 似乎就位。但二传手不是。 Getter 和 setter 是使用 java 进行高效编程的桥梁中的一个重要部分。也为 fnum 和 snum 添加设置器

    • 在主类中,使用 new 运算符和就地构造函数创建一个 Calculate 对象。

    • 使用创建的 Calculate 对象调用 getAnswer() 方法。

    其余代码对我来说看起来不错。 模块化。您可以以更好的方式阅读您的程序。

    这是我的模块化代码。 两个文件:Main.java & Calculate.java

    计算.java

    public class Calculate {
    
    
    private double fn;
    private double sn;
    private char op;
    
        public double getFn() {
            return fn;
        }
    
        public void setFn(double fn) {
            this.fn = fn;
        }
    
        public double getSn() {
            return sn;
        }
    
        public void setSn(double sn) {
            this.sn = sn;
        }
    
        public char getOp() {
            return op;
        }
    
        public void setOp(char op) {
            this.op = op;
        }
    
    
    
        public Calculate(double fn, double sn, char op) {
            this.fn = fn;
            this.sn = sn;
            this.op = op;
        }
    
    
    public void getAnswer(){
        double ans;
        switch (getOp()){
            case '+': 
                ans = add(getFn(), getSn());
                ansOutput(ans);
                break;
            case '-': 
                ans = sub (getFn(), getSn());
                ansOutput(ans);
                break;
            case '*': 
                ans = mul (getFn(), getSn());
                ansOutput(ans);
                break;
            case '/': 
                ans = div (getFn(), getSn());
                ansOutput(ans);
                break;
            default:
                System.out.println("--------------------------");
                System.out.println("Invalid choice of operator");
                System.out.println("--------------------------");
            }
        }
        public static double add(double x,double y){
            return x + y;
        }
        public static double sub(double x, double y){
            return x - y;
        }
        public static double mul(double x, double y){
            return x * y;
        }
        public static double div(double x, double y){
            return x / y;
        }
    
        public static void ansOutput(double x){
            System.out.println("----------- -------");
            System.out.printf("the answer is %.2f\n", x);
            System.out.println("-------------------");
        }
    }
    

    Main.java

    public class Main {
        public static void main(String args[])
        {
            Calculate obj = new Calculate(1,2,'+');
            obj.getAnswer();
        }
    }
    

    【讨论】:

    • 混淆:“创建一个调用main方法的新类。”又是什么主要方法?
    • @Ingo:现在清楚了吗?
    • 更好。尽管我认为没有理由不在Calculate 本身中使用main。 (我过去几乎每堂课都有一个,它只是执行一个非常基本的自测,或其他什么。)
    • @Ingo:我同意。这实际上取决于程序员自己。对我来说,它只是感觉更有条理,这就是为什么我将它保存为一个单独的文件。在每个 java 文件中保留一个 main 没有害处 :)
    【解决方案4】:

    你写代码的地方

    public class Main {
        public static void main(String args[])
        {
            Calculate obj = new Calculate(1,2,'+');
            obj.getAnswer();
        }
    }
    

    在这里,您必须运行“Main”类而不是您在程序开始时创建的类。为此,请转到运行配置并搜索此类名称“Main”,该类名称在 this(public static void main(String args[])) 中有 main 方法。你会得到你的输出。

    【讨论】:

    • 为什么 OP 想要一个新课程?为什么不直接告诉他/她如何将 main 方法添加到他/她现有的类中?
    【解决方案5】:

    你似乎没有创建一个 main 方法,它应该看起来像这样(我不确定)

      class RunThis
    {
        public static void main(String[] args)
        {
    
        Calculate answer = new Calculate();
        answer.getNumber1();
        answer.getNumber2();
        answer.setNumber(answer.getNumber1() , answer.getNumber2());
        answer.getOper();
        answer.setOper(answer.getOper());
        answer.getAnswer();
        }
    }
    

    关键是你应该在某个类下创建了一个 main 方法,编译后你应该运行包含 main 方法的 .class 文件。在这种情况下,主要方法在 RunThis 下,即 RunThis.class。

    我是java新手,这可能是正确的答案,也可能不是正确的答案,如果我错了,请纠正我

    【讨论】:

      猜你喜欢
      • 2017-03-01
      • 2013-03-01
      • 2014-01-13
      • 2017-03-04
      • 2014-05-13
      • 2015-05-20
      • 1970-01-01
      相关资源
      最近更新 更多