当前位置: 代码迷 >> Java相关 >> [求助]编译不通过,错在哪?
  详细解决方案

[求助]编译不通过,错在哪?

热度:311   发布时间:2006-08-09 14:45:28.0
[求助]编译不通过,错在哪?

/*
程序的特点:
生成10个不重复的字母,
并且10个字母不重叠.
*/

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

public class DaZi extends Applet implements Runnable,KeyListener
{
private Image bgImage;
private Graphics bg;
static Thread myThread;
static JFrame md;
String Zi26="";
String sz[]={"a","a","a","a","a","a","a","a","a","a"}; //用来存储10个字母
int x[]=new int[10];
int y[]=new int[10];
//字母的X,Y坐标.
int error=0,right=0,sum=0;
Toolkit KIT=this.getToolkit();
Image pinguo=KIT.createImage("pinguo.jpg");

public DaZi() //用来生成一个包含26个英文字母的字符串Zi26
{for (int i=0;i<26;i++)
Zi26+=(char)((int)'A'+i);
}

public void cushi() //调用相应的方法来初始sz[],x[],y[]的值.
{for (int i=0;i<10;i++)
{sz[i]=noRepeat(i);
x[i]=noHit(i,10);
y[i]=(int)(Math.random()*50);
}
}

public void panduan() //用来判断sz[i]的y值是否要到达屏幕下边,如果是就把Y值变为0,否则就把Y值加3.
{for (int i=0;i<10;i++)
if (y[i]>md.getHeight()-10) y[i]=0;
else y[i]=y[i]+3;

}

public void paint(Graphics g) //在屏幕X[I],Y[I]处显示字符串.
{g.setColor(new Color(255,255,128));
g.setFont(new Font("Vrinda",1,20));
for(int i=0;i<sz.length;i++)
{g.drawImage(pinguo,x[i]-6,y[i]-14,this);
g.drawString(sz[i],x[i],y[i]);
}
}

public void keyPressed(KeyEvent k) //当用户按对字母时,就新生成一个字母.
{String c=""+k.getKeyChar();
int i=0;
for(;i<sz.length;i++)
if (sz[i].equalsIgnoreCase(c)) {sz[i]=noRepeat(i); x[i]=noHit(i,10); y[i]=0; break; }
if (i<sz.length) right++;
else error++;
sum=right+error;
}

public void keyReleased(KeyEvent k){}
public void keyTyped(KeyEvent k){}

public String noRepeat(int j) //生成一个不重复的字母.
{int zc,i;
String xinx;
while(true)
{zc=(int)(Math.random()*26);
xinx=Zi26.substring(zc,zc+1);
for(i=0;i<10;i++)
if (sz[i].equals(xinx)) break;
if(i==10) return xinx;
}
}

int noHit(int i,int langth) //让字母保持车距.
{int tmpX,j,k,width=20;
while (true)
{ tmpX=(int)(Math.random()*780)+1;
for(j=0;j<10;j++)
{ if (tmpX+width<x[j] || tmpX>x[j]+width) continue; //如果欲生成的位置不与当前J所占的位置相交就判断下一个J.
if ((tmpX>=x[j] && tmpX<=x[j]+width) || (tmpX+width>=x[j] && tmpX+width<=x[j]+width)) break;
//如果欲生成的位置与当前x[j]所占据的范围相交就结束循环,重新生成一个起始位置.

}
if (j==10) {return tmpX;}
}
}

public void update(Graphics g)
{if (bgImage==null)
{bgImage=createImage(this.getSize().width,this.getSize().height);
bg=bgImage.getGraphics();
}
bg.setColor(getBackground());
bg.fillRect(0,0,this.getSize().width,this.getSize().height);
//bg.setColor(getForeground());
paint(bg);
g.drawImage(bgImage,0,0,this);
}

public void run() //用线程循环更改Y值,并根据新的坐标在屏幕上重画SZ[I];
{
while(true)
{panduan();
repaint();
try{ myThread.sleep(50); }catch(Exception e) {}
}
}

public static void main(String args[])
{DaZi m=new DaZi();
md=new JFrame("打字训练室");
md.setSize(800,600);
md.addKeyListener(m);
md.getContentPane().add(m);
m.cushi();
md.setVisible(true);
myThread=new Thread(m);
myThread.start();
}

}




已改正

编译时出错:
DaZi.java:98: 需要 "class" 或 "interface"
public void update(Graphics g)
^
DaZi.java:135: 需要 "class" 或 "interface"
}
^
DaZi.java:136: 需要 "class" 或 "interface"
^
3 错误

咋改?


[此贴子已经被作者于2006-8-9 15:21:33编辑过]

搜索更多相关的解决方案: 编译  

----------------解决方案--------------------------------------------------------

no hit 那个方法好象多个括号,格式太乱了,都不想看。。。


----------------解决方案--------------------------------------------------------
本来不乱的,粘贴到这上面这乱了,不知咋回事
我是用记事本写的
----------------解决方案--------------------------------------------------------
搞定了,原来是我修改noHit时忘记删除"}"了.
呵呵
现在能运行了

document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" alt="" />

[此贴子已经被作者于2006-8-9 15:20:12编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案