2017-08-03 47 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,即有時會引起一些不需要的錯誤。

我希望它可以幫助你進一步。