-2

对不起,如果我似乎在向这个论坛发送垃圾邮件,但我非常接近完成这个小程序。我创建了一个简单的 Ball 类,其中包含球的 x、y、半径和速度。此时运行小程序会返回42 个错误,但它们都是一样的,“找不到符号”。对该主题的搜索已将其缩小为未声明变量的问题或构造函数的问题。我已经搜索了一个小时的解决方案,但我不知道去哪里找。有什么解决办法吗?(我使用 Java 编辑器)

import java.applet.*; 
import java.awt.*; 
import javax.swing.*;
import javax.swing.event.*;

public class BallApplet2 extends Applet implements Runnable 
{ 
public static void main(String[] args) { 
Ball rodebal = new Ball();
Ball blauwebal = new Ball();

rodebal.x_pos = 150;
rodebal.y_pos = 301;
rodebal.radius = 20;
rodebal.randomspeed = (int)(Math.random() * 7 + 2);
rodebal.ballspeedx = -randomspeed();

blauwebal.x_pos = 250;
blauwebal.y_pos = 301;
blauwebal.radius = 20;
blauwebal.randomspeed = (int)(Math.random() * 7 + 2);
blauwebal.ballspeedx = randomspeed();
}

public void init() {} 

// de Thread wordt hier aangemaakt
 public void start() { 
Thread th = new Thread (this); 
th.start (); } 
public void stop() {} 
public void destroy() {} 

// de Thread wordt hier uitgevoerd door de methode run()
public void run () {
//  de prioriteit van de Thread wordt verlaagd zodat hij niet nog een keer geactiveerd   wordt tijdens het uitvoeren
Thread.currentThread().setPriority(Thread.MIN_PRIORITY); 
while (true) 
{ 
  rodebal.x_pos += rodebal.ballspeedx;

  blauwebal.x_pos += blauwebal.ballspeedx;


  // repaint() update de positie van de ballen
  repaint();
  // als x_pos < 100 is draait de richting van de bal om
  if (rodebal.x_pos  < 100) {
    rodebal.ballspeedx = -rodebal.ballspeedx; 
    x_pos1 = 100; 
  } 
  if (blauwebal.x_pos  < 100) {
    blauwebal.ballspeedx = -blauwebal.ballspeedx; 
    x_pos2 = 100; 
  }  
  // als x_pos > 300 is draait de richting van de bal om
  if (rodebal.x_pos  > 300) {
    rodebal.ballspeedx1 = -rodebal.ballspeedx; 
    x_pos1 = 300; 
  } 
  if (blauwebal.x_pos  > 300) {
    blauwebal.ballspeedx = -blauwebal.ballspeedx; 
    x_pos2 = 300; 
  }
  // als de positie van de blauwe bal (x_pos2) - de positie van de rode bal (x_pos1) kleiner is 
  // dan de som van de stralen van de rode en de blauwe bal draaien beide ballen om.                                     
  if (Math.abs(blauwebal.x_pos-rodebal.x_pos)<rodebal.radius+blauwebal.radius){
    rodebal.ballspeedx = -rodebal.ballspeedx;
    blauwebal.ballspeedx = -blauwebal.ballspeedx;
  }

  try { Thread.sleep (20); } 



  catch (InterruptedException ex) {} 

Thread.currentThread().setPriority(Thread.MAX_PRIORITY); }} 

 public void paint (Graphics g) {


// de rode bal
g.setColor (Color.red); 
g.fillOval (rodebal.x_pos - rodebal.radius, rodebal.y_pos - rodebal.radius, 2 * rodebal.radius, 2 * rodebal.radius); 

// de blauwe bal
g.setColor (Color.blue); 
g.fillOval (blauwe.x_pos - blauwe.radius2, blauwebal.y_pos - blauwe.radius, 2 * blauwe.radius, 2 * blauwe.radius); 


g.setColor(Color.black);
g.drawLine(80,280,80,320); // lijn links
g.drawLine(320,280,320,320); // lijn rechts
g.drawLine(80,320,320,320); // lijn onder



 }



 // Einde eventmethoden


 } 





public class Ball {


int x_pos;
int y_pos;
int radius;
int randomspeed;
float ballspeedx;


}
4

1 回答 1

2

您正在尝试在 start() 方法中使用变量 rodebal 和 blauwebal,但它们没有在那里声明。它们需要在类中声明,而不是作为静态方法 main() 中的变量,以便可用于 start()。


回答一个附加问题:

我没有空间或时间来解释所有这些——我将给你一些快速的指示,然后你将不得不学习基础课本中的一些基础知识。

您似乎想要类中方法的全局变量。它们必须在类中声明,但在任何方法之外。大括号定义了类和方法的“内部”,因此,在方法的大括号之外,但在类的大括号内。

您的主要方法是(并且必须是)静态的。这与实例变量不同。常见的、正确的方法是使用作为实例变量的变量,这意味着它们不能直接从静态方法访问。所以你最终会得到一个看起来像这样的开头:

public class Foo
{
  String var1 = null;
  String var2 = null;
  int var3 = 0;

  public static void main (String[] arguments)
  {
    Foo foo = new Foo(); // create an instance of this class
    foo.bar();           // execute a method on that instance
  }

  public void bar()
  {
    // here you can use the variables var1 through var3
    // you can also use them in any other non-static method in the class;
    // changing them in one method will make that change visible to the other.
  }
}

现在,阅读以下概念:类、实例、实例变量、静态方法、静态变量。你需要把所有这些东西都冷却下来,才能用这种或任何其他 OO 语言进行任何重要的编程。

于 2013-10-29T20:52:04.903 回答