是不是程序代码太长了呀?程序爱好者应该对长的程序来劲才对呀!各位爱好者把这段程序拷下来试一下,再帮我解释一下其中的remove方法好吗?太感谢了哦!一定给分的呀!
解决方案 »
- System.in.read();和 System.out.println
- button的文字显示问题
- 帮忙看下
- 求JAVA写的简单排课系统
- 求教一条编程题目(文件字符串的计算)
- 用AWT做的记事本怎么写保存代码?
- 统计两个相同位数(32或64或128...)二进制无符号整数有多少位不同
- 怎样一次取得sqlserver数据库的日期和时间?
- x86(大雪)来了吗?进来看看……我都快气疯了……
- 【求助】Socket编程,程序第二次运行至server.accept()异常停止。
- 关于Astra LoadTest 5.4解密码!!
- 怎样从执行文件启动java程序,以避免出现那个控制台窗口,好象用javaw.exe也会有一个dos窗口弹出来呵,请高手指点
先注意这一点,nsquares总比数组有效下标大1,比如nsquares为7的时候,数组中存储的有效的矩形为squares[0-6],你看,add中就是这样的,先存,再++ public void add(int x,int y)
{
if(nsquares<MAXSQUARE)
{
squares[nsquares]=new Point(x,y);
nsquares++;
repaint();
}
}
然后就不难解释remove了
public void remove(int n)
{
if(n<0 || n>MAXSQUARE)
return;
nsquares--;
squares[n]=squares[nsquares];
repaint();
}首先前两行检测n的范围合法性
然后,让矩形总数减少一个
比如,原来nsquares=7,squares[0-6]存着当前7个矩形
你要删除第5个,既 n = 5nsquares--; //nsquares = 6
squares[5] = squares[6]; //把最后一个矩形存在square[5]这个位置,抹掉
原来的squares[5],这时squares[6]就没用了,我们可以用squares[5]来存那个矩形
结果仍然保持了nsquares和squares[]的有效下标大1关系
nsquares=6,squares[0-5]存着当前7个矩形understand?
再不明白,回去看看数据结构或者发短信to me
Forget to tell you that, in your remove() method, repaint() method automatically invalidates all the images on your panel, and redraw your required components with a call to every components' paintComponent() method. So it's that easy.
但是如果将上面的调用remove的程序段改成这样:
public void mouseClicked(MouseEvent evt)
{
int x=evt.getX();
int y=evt.getY();
current=find(x,y);
if(current>=0 && evt.getClickCount()>=2)
{
System.out.println(current);
//remove(current);
}
}
如果将各个小矩形画好后,再双击这个小矩形的话,打印出的current值是0-9之间(如果10个小矩形都画好的话),也就是说在调用remove方法的时候,方法参数n的值也是0-9之间。
那么我们假设要擦除第一个矩形,那么它n的值是0,那么在调用squares[n]=squares[nsquares]时候,就造成了
squares[0]=squares[0]了,我想如果传进去的值是1-10之间,那么上面这位网友小丹尼的分析是对的,可是现在传进去的值是0-9啊!我就是在这里看不懂啊!!!这应该怎么来解释呢?
造成squares[0]=squares[0]的情况只有一种
n=0, nsquares在remove中 nsquares-- 变成为0
也就是说,你是最后一个删掉squares[0],
所以squares[0]要保存你刚双击删掉的squares[0],
虽然这步没用,但是这步保持了整个算法的逻辑,
这没有问题,而且很正确!然后你的nsquares变为0,
限制squares[]里所有的东西就都不能使用了其实,你刚才做的一步看起来和运行时squares[0]=squares[0]都是多余的,
但是逻辑上,他就是这样的
这是一个很简单的数组模拟链表问题,看看数据结构吧,记住
======数据结构是计算机最核心的课目======
======The study of data structures is core to a computer science curriculum.========= -------- Pacific 大学 William Ford & William Topp 语
清华有 C++ 描述版的一本,很不错,但是我看的时候,那本书很新,错误太多,必须有老师指点,现在该第二或第三版了吧,不知道怎么样了
清华出的英文影印版的 Data Structures with C++ 很不错,很有名的,
国外原价75美元,国内只54人民币!!!是我最喜欢的数据结构的书之一,作者Pacific University 的 William Ford 和 William Topp.
如果你觉得英文看起来累,又打听不到清华那本书现在质量如何,就看看南大的吧,只可惜是Pascal版的,看起来罗索一些,不过内容是很棒