很抱歉,如果我似乎在垃圾邮件论坛,但我非常接近完成此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;
}
答案 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语言进行任何重要的编程。