2017-08-03 73 views
0

刚开始这里。我以前有过编程类,但是对于Java来说并不陌生,并且没有丰富的经验。该节目来自Mehran Sahami在斯坦福大学Youtube上的讲座。代码从32分钟左右开始可见。这是一个简单的图形程序,显示一个弹跳球。一个适合我开始尝试设置的好地方,用一个对象替换另一个对象,并且通常习惯于语法与屏幕上显示内容的相关性。但是,我甚至无法进入隐喻的起跑线!我尝试切割并粘贴到Sololearn模拟器中,但得到相同的错误。我认为它必须与acm库有关,但是。 。 。什么?Java acm入门

代码在下面,错误消息在下面。

import acm.program.*; 
import acm.graphics.*; 


public class BouncingBall extends GraphicsProgram { 
private static final int DIAM_BALL = 30; 
private static final double GRAVITY = 3; 
private static final int DELAY = 50; 
private static final double X_START = DIAM_BALL/2; 
private static final double Y_START = 100; 

//x velocity 
private static final double X_VEL = 5; 
//Y velocity determined by gravity and bounce 
private static final double BOUNCE_REDUCE = 0.9; 
//Starting coords 
private double xVel = X_VEL; 
private double yVel = 0.0; 
//private instance variable 
private GOval ball; 
} 
public void run(){ 
    setup(){ 
     while (ball.getX() < getWidth()) { 
      moveBall(); 
      checkForCollision(); 
      pause(DELAY); 
     } 
     } 
     //create and place ball 
    private void setup(){ 
     ball=new GOval(X_START,Y_START,DIAM_BALL,DIAM_BALL); 
     ball.setFilled(true); 
     add(ball); 
    } 
    //update and move ball 
private void moveBall(){ 
     yVel+=GRAVITY; 
     ball.move(xVel,yVel); 
} 
//Collision detection 
private void checkForCollision(){ 
    if(ball.getY()>getHeight()-DIAM_BALL){ 
     yVel=-yVel*BOUNCE_REDUCE; 
     double diff=ball.getY()-(getHeight()-DIAM_BALL); 
     ball.move(0,-2*diff); 
    } 
} 
} 
} 

“错误:爪哇:预期类,接口,或枚举” 大约有这些十几,指定(22,12),(26,17),(27,17),(28 ,13),(33,13),(34,13)。 。 。

我有一种感觉,当我明白为什么有些问题时,我将能够解决所有问题。

在此先感谢!

+0

[Java ACM package]的可能重复(https://stackoverflow.com/questions/3796879/java-acm-package) –

+0

我从上面的链接中得到了acm,我试着将acm.jar移动到不同的地方我的直播tories,但没有一个似乎有任何效果。无论我放在哪里,都会出现同样的错误。此外,文件的类型读取“可执行Jar文件”,这与某些评论者描述的方式不同。 –

+0

运行中的行应该有setup(){?或setup(); –

回答

0

我删除了setup(){和a}在文件末尾,我认为这是问题的原因。

import acm.program.*; 
import acm.graphics.*; 


public class BouncingBall extends GraphicsProgram { 
private static final int DIAM_BALL = 30; 
private static final double GRAVITY = 3; 
private static final int DELAY = 50; 
private static final double X_START = DIAM_BALL/2; 
private static final double Y_START = 100; 

//x velocity 
private static final double X_VEL = 5; 
//Y velocity determined by gravity and bounce 
private static final double BOUNCE_REDUCE = 0.9; 
//Starting coords 
private double xVel = X_VEL; 
private double yVel = 0.0; 
//private instance variable 
private GOval ball; 


public void run(){ 
    setup(); 
    while (ball.getX() < getWidth()) { 
      moveBall(); 
      checkForCollision(); 
      pause(DELAY); 
    } 
} 
//create and place ball 
private void setup(){ 
     ball=new GOval(X_START,Y_START,DIAM_BALL,DIAM_BALL); 
     ball.setFilled(true); 
     add(ball); 
    } 
    //update and move ball 
private void moveBall(){ 
     yVel+=GRAVITY; 
     ball.move(xVel,yVel); 
} 
//Collision detection 
private void checkForCollision(){ 
    if(ball.getY()>getHeight()-DIAM_BALL){ 
     yVel=-yVel*BOUNCE_REDUCE; 
     double diff=ball.getY()-(getHeight()-DIAM_BALL); 
     ball.move(0,-2*diff); 
    } 
} 
} 

看看35:03的视频,它显示了上面的内容。

+0

我会尽力,谢谢。 –

+0

嗯,没有编译,但只有一个错误。 。 。一个改进的地狱。让我们看看我能否解决剩下的问题。谢谢! –

+0

好吧,废话。 “错误:(5,8)java:class BouncingBall是公共的,应该在名为BouncingBall.java的文件中声明。”这段代码是不是从BouncingBall类的引用行开始的?我错过了什么吗? –

0

@Saint Razz:首先,您使用非公共图书馆'acm.jar'和sololearn模拟器
不知道这个库。其次,尽量避免使用'静态'。除了你写了一个类,它有方法,变量,常量可能只存在一次。
例如

class Student() { 
    private String mName; 
    private String mCollege; 
    public Student(String name) { 
     mName = name; 
     college = "ITS"; 
    } 
} 


在这种情况下,它将使意义使用的内存问题静态弦乐大学。

接下来有一个错误,伯克利羊羔以及纠正。在方法中声明方法是没有意义的。我的意思是你的setup()方法在run()方法中。
仔细看看你的花括号。如果您尝试在java中调用类外的方法,编译器将始终引发错误。 (请参阅专用GOval球声明后关闭大括号

最后一件事我建议您在窗口宽度和高度上使用常量或在公共无效init(){}方法中初始化窗口调用run方法,只要您使用acm.jar,否则可能发生,你打电话的getWidth()和获取值0,即有时会引起一些不需要的错误。

我希望它可以帮助你进一步。