Discussion:
[問題] sort compiler過了 .. 執行不ok 大問栽
(时间太久无法回复)
.........
2006-11-26 20:57:51 UTC
Permalink
我是要做一個陣列
若輸入為"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++)
{ 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);


}
}

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.2.243
t***@kkcity.com.tw
2006-11-27 06:03:09 UTC
Permalink
Post by .........
我是要做一個陣列
若輸入為"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的空間
(我記得寫泡泡排序好像有這麼一步,忘了,那已經是幾億年前的事了)
Post by .........
{ 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家唱片公司合法授權 音樂盡情下載
--

继续阅读narkive:
Loading...