我得到42“找不到符号”错误,我找不到解决方案

时间:2013-10-29 20:36:02

标签: java class constructor applet

很抱歉,如果我似乎在垃圾邮件论坛,但我非常接近完成此applet。我创建了一个简单的Ball类,它包含球的x,y,半径和速度。此时运行applet会返回 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;


}

1 个答案:

答案 0 :(得分:2)

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


回答另一个问题:

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

您似乎需要对类中的方法赋予全局变量。它们必须在类中声明,但不在任何方法之外。大括号定义&#34;在&#34;类和方法,所以,在方法的大括号之外,但在类的大括号内。

您的主要方法是(并且必须是)静态的。这与实例变量不同。执行此操作的常见,正确方法是使用变量作为实例变量,这意味着无法直接从静态方法访问它们。因此,您最终会得到一个类似于此的开头:

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语言进行任何重要的编程。