【问题标题】:Java code is not executing instance methodJava 代码没有执行实例方法
【发布时间】:2015-06-09 17:41:49
【问题描述】:

我正在使用 BlueJ IDE。我有一个名为ProgramOne 的主类,还有一个名为StarTurtle 的主类(用于提供实例方法)。

这里是ProgramOne的代码:

public class ProgramOne
{
     public static void main (String[ ] args)  
     {  
          StarTurtle turtle1 = new StarTurtle(5);
          turtle1.StartTurtle();

        }
    }

这里是StarTurtle的代码:

public class StarTurtle 
{ 

private int points;      

public int StartTurtle(int x) 
{ 
points = x; 

Turtle sue;
sue = new Turtle();
sue.paint (90, 40); 

} 

} 

(您看到的turtle 方法来自另外两个类,为简洁起见,我没有在此处粘贴。这些类可在http://www.cs.ccsu.edu/~jones/book.htm 手册中找到)

代码只编译,没有执行的选项。但是,没有执行void main (String[ ] args) 的选项,应该有执行主类的选项。有谁知道这是什么原因?我假设代码本身存在问题。

编辑:当我的意思是“执行选项”时,我指的是这个 BlueJ 功能:

编辑:以 Titus 和 Redge 描述的方式更改代码(在答案和答案的 cmets 中)修复了 StarTurtle 类,但主类 ProgramOne 仍然不执行.

【问题讨论】:

  • “执行选项”是什么意思?
  • 嗯...您在屏幕截图中展示了您自己问题的解决方案...
  • StarTurtle 没有任何采用int 的构造函数,public int StartTurtle(int x) 是一个方法而不是构造函数,并且您正在从 main 方法调用它而没有任何参数,如是的,这段代码不会编译。
  • 这段代码如何编译?
  • 为了您自己,请继续使用 Eclipse

标签: java bluej


【解决方案1】:

改变

public int StartTurtle(int x)

到这里

public StartTurtle(int x)

你写了关于StartTurtl类:

旨在提供实例方法

我的问题是 - instance method 是什么??

【讨论】:

  • 实例方法是非静态方法——它们需要单独的实例。
  • 谢谢你,我只是指这种方法,只是方法而已。
  • 仍然无法正常工作-我在它最初没有执行后添加了int
  • 更改 IDE 例如。蚀。在那里运行没有问题。
  • 感谢我的 AP Java 课程。我尝试过的每一门课程都需要 BlueJ,但我绝对讨厌它——据说它是为初学者准备的,但对我来说它只会让事情变得复杂。
【解决方案2】:

StarTurtle 没有任何采用 int 的构造函数,

public int StartTurtle(int x) 

是一个方法而不是构造函数,并且您从 main 方法调用它,没有任何参数,因为它是这样,这段代码不会编译。

你可以把代码改成这样。

 public static void main (String[ ] args) {  
      StarTurtle turtle1 = new StarTurtle();
      int result = turtle1.StartTurtle(5);

 }

为了遵守 Java 约定,您应该考虑以小写开头的方法名称。

【讨论】:

  • 我知道骆驼套,但我正在学习的课程不需要甚至不需要它。
  • 感谢您的回答,但代码仍然没有执行。
  • @seanlevan 我没有使用 BlueJ,但可能没有显示执行选项,因为您的代码无法编译,从您发布的代码来看,没有其他问题很明显。
  • ` int startTurtle (int) ` 实际上并没有返回结果,所以它应该是 `void StartTurtle (int)` 并且不被分配给任何东西,或者它应该以 return 语句结束。跨度>
  • 不要尊重约定,因为它们是一种要求,尊重它们,因为它会使编码更容易,如果你这样做了,你会注意到StartTurtle(int i) 是一种方法而不是构造函数.
【解决方案3】:

所以...我以前不熟悉 BlueJ,但我刚刚下载了它并创建了我们一直建议的代码。现在看起来像这样。

ProgramOne.java

public class ProgramOne
{
     public static void main (String[ ] args)  
     {  
          StarTurtle turtle1 = new StarTurtle();
          turtle1.StartTurtle(5);

     }
}

StarTurtle.java

public class StarTurtle 
{ 

    private int points;      

    public void StartTurtle(int x) 
    { 
        points = x; 

        Turtle sue;
        sue = new Turtle();
        sue.paint (90, 40); 

    } 

} 

使用此代码,上下文菜单看起来与原始问题中的完全一样:

读取void main(String[] args)的菜单项弹出如下对话框:

如果我点击 OK 按钮,我似乎会看到一个名为“Turtle Drawings”的窗口,其中包含一条垂直线。

我将 StartTurtle(int) 方法更改如下:

    public void StartTurtle(int x) 
    { 
        points = x; 

        Turtle sue;
        sue = new Turtle(true, 200,90);
        sue.sleep(1000);
        sue.say("Something");
        sue.sleep(1000);
        sue.paint (90, 40); 
        sue.sleep(1000);
        sue.fillCircle(5);
        sue.sleep(1000);
        sue.fillBox(10, 20);

    } 

} 

修改后的代码以 1 秒的间隔显示消息、垂直线、圆形和矩形。

我只能由此得出结论,代码现在是有效的,您应该通过选择读取为void main(String{} args) 的菜单项来执行它。

【讨论】:

  • 如何使海龟成为全局的,以便它可以在主类中声明,然后在方法中使用?
  • 我不明白你所说的全局是什么意思。 Java 是面向对象的,所以全局的概念有点陌生。你能解释一下你想做什么吗?
  • 你说得对,Java 是我第一次涉足 OO 编程——当我指的是全局时,我的意思是声明一个变量,其范围可以从任何类访问。 @redge
  • 最接近的方法是将其声明为静态字段,例如 public static final StarTurtle turtle1 = new StarTurtle ();,您可以在 Program One 的主要方法之前执行此操作,而不是在方法中,然后您可以调用 @ 987654330@ 在 main 方法中或实际上在其他任何地方。
  • 谢谢。当我问那个问题/评论时,我没有意识到课程想要使用extend 让类继承它们的变量。我想这就是OO方式! :) @redge
猜你喜欢
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 2015-12-03
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多