亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

List序列越界問題

List序列越界問題

Js_Ly 2015-12-01 17:49:31
import java.util.*;?class Cardclass{ public String ID; public String color; public Cardclass(String ID , String color){ this.ID = ID; this.color = color; }}class Card{ static List<Cardclass> newcard; public Card(){ this.newcard = new ArrayList<Cardclass>(); } public void add(){ int i; int j; int n=0; String[] IDs=new String[13]; IDs[0] = "A"; IDs[1] = "2"; IDs[2] = "3"; IDs[3] = "4"; IDs[4] = "5"; IDs[5] = "6"; IDs[6] = "7"; IDs[7] = "8"; IDs[8] = "9"; IDs[9] = "10"; IDs[10] = "J"; IDs[11] = "Q"; IDs[12] = "K"; String[] color=new String[4]; color[0] = "Black"; color[1] = "Red"; color[2] = "Plum"; color[3] = "Square"; for(i = 0 ; i < 13 ; i++){ for(j = 0 ; j < 4 ; j++){ Cardclass cc = new Cardclass(IDs[i],color[j]); newcard.add(cc);? Cardclass outPut = (Cardclass)newcard.get(n); System.out.println(outPut.ID + " ?" + outPut.color); n++; } } }}class people extends Card{ public int Num; public String Name; public String id; public String color; public people(int x , String y ,String newID , String newcolor){ Num = x; Name = y; System.out.println("1"); id = newID; color = newcolor; }}public class tp extends Card{ public static void main(String[] args){ int i; int j; int n=0; Card cd = new Card(); cd.add(); System.out.println("*********************"); Scanner input = new Scanner(System.in); for(i = 0 ; i < 2 ;i++){ System.out.println("請輸入玩家序號"); int newnum = input.nextInt(); System.out.println("請輸入玩家名字"); String newname = input.next(); Cardclass newcd = (Cardclass)newcard.get(n); ? // 第二次執行時候會提示越界 String newID = newcd.ID;? String newcolor = newcd.color; people newpeople = new people(newnum , newname , newID , newcolor); System.out.println(newpeople.Num+" "+newpeople.Name+" "+newpeople.id+" "+newpeople.color); n++; } }}問題在注釋那句 ?剛剛學不是很懂 - -!
查看完整描述

1 回答

已采納
?
sxian_wang

TA貢獻16條經驗 獲得超8個贊

不要亂用繼承!繼承一定是子類和父類之間存在“是不是”的關系,即子類一定是父類的一種,即子集。一個人能是撲克牌的一種嗎?所以你的代碼問題就出現在了這里,main函數實例化people的時候。因為你的people都是繼承的Card類,而newCard這個List又被你設置成static變成了共享變量。所以你在main函數里面,執行cd.add()后,第一次運行的時候newCard是正常的;當你運行到實例化people一行的時候,因為people繼承的是Card,它會調用父類的無參構造器,你看看你父類的無參構造是啥玩意?初始化newCard。所以你第二次運行的時候newCard變成空的了,自然會報ArrayIndexOutOfBounds異常。

至于修正的辦法很多種,我就不提供了,你自己動動腦子吧~

查看完整回答
反對 回復 2015-12-01
  • Js_Ly
    Js_Ly
    謝謝 把people那個錯誤繼承去掉就運行了 原來是這樣
  • 1 回答
  • 0 關注
  • 1927 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號