看板java
标 题Re: [问题] sort compiler过了 .. 执行不ok 大问栽
发信站KKCITY (Mon Nov 27 14:03:09 2006)
转信站ptt!ctu-reader!ctu-peer!news.nctu!netnews.chu!Leo.mi.chu!zoonews.ee.nt
※ 引述《[email protected] (.........)》之铭言:
> 我是要做一个阵列
> 若输入为"999"就停止
> 再把输入的数做排大小(伪bubble sort)
> compile过了 不过执行到一半就会出现怪怪的
> 例如我输入了:10 20 999
> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:3
> at arr.main(arr.java:40)
> Press any key to continue...
> 请各位前辈给我一点提示八..多谢多谢 大感激
> 以下为我的程式码
> import javax.swing.JOptionPane;
> public class arr
> {public static void main(String args[])
> {
> int[] a1=new int[100];
> int i;
> int b=0;
> for(i=0;i<=14;i++)
> {String out=JOptionPane.showInputDialog(null,"enter int","window",JOptionPane.QUESTION_MESSAGE);
> a1[i]=Integer.parseInt(out);
> if(a1[i]==999)
> {
> b=i;
> break;
> }
> }
> int[] a2=new int[b+1];
> for(i=0;i<=b;i++)
> { a2[i]=a1[i];
> }
> String o="the array2 is ";
> for(i=0;i<=b;i++)
> { o=o+" "+a2[i];
> }
> JOptionPane.showMessageDialog(null,o,"win",JOptionPane.INFORMATION_MESSAGE);
> int temp=0;
> int s=0;
> for(s=0;s<=b;s++)
> {
> for(i=0;i<=b;i++)
arr.main(arr.java:40)指的就是上面这一行,
它跟你说ArrayIndexOutOfException,也就是说阵列大小不符合
您输入10, 20, 999,此时a1[0,1,2]就是10,20,999,因为到999就停了
所以此时b = i = 2; 接着您起始化一个a2[]阵列,大小为3(问题就在这里了)
此时您复制a2[] = a1[]
然而在这个回圈中,如果作到最後一次时,也就是i = b = 2时,
底下这行就挂了!因为a2[]阵列大小为3时,最大的是a2[2],如果硬塞a2[3]的话
就Error啦
这样您了解了吗?
要嘛,在宣告阵列时就宣告成a2 = new int[b+2]以争取作swap的空间
(我记得写泡泡排序好像有这麽一步,忘了,那已经是几亿年前的事了)
> { if(a2[i]>a2[i+1])
> {temp=a2[i];
> a2[i]=a2[i+1];
> a2[i+1]=temp;
> }
> }
> }
> JOptionPane.showMessageDialog(null,"第二大为"+a2[b-1]+" "+"第二小为"+a2[1],"win",JOptionPane.INFORMATION_MESSAGE);
> }
> }
--
┌─────◆KKCITY◆─────┐ KKBOX◤歌名╱歌手╱歌词╱专辑◢搜寻
│ bbs.kkcity.com.tw │ ★ http://www.kkbox.com.tw ★
└──《From:61.62.107.41
》──┘ 超过80家唱片公司合法授权 音乐尽情下载
--