2011-10-03 45 views
0

數組的所有內容,這是我在這個網站的第一篇文章,所以請耐心:) 我學習Java和我試圖創建一個小程序,存儲在兩個數組球員的名字和他們的出席。我正在使用JOptionPane作爲'用戶界面'。當用戶要求時,我希望顯示他們的姓名和相應的出席人數。 這是我的代碼(它沒有完成):如何顯示在Java中

import javax.swing.*; 
import java.text.*; 

public class Pelada{ 
    public static void main(String []args){ 
     String[] players = new String[10]; 
    int[] attendance = new int[10]; 
    int x = 0, z = 0, control = 0, posPlayer = 0; 
    String test; 

    while(control != 4){ 
     control = Integer.parseInt(JOptionPane.showInputDialog(null,"1- Add  new players \n 2- List \n 3- Increment attendance \n 4- Delete player \n 4- Exit", "Choose an option below", JOptionPane.INFORMATION_MESSAGE)); 
      if(control == 1){ 
       players[x] = JOptionPane.showInputDialog(null, "New player: ", "Add New Player", JOptionPane.INFORMATION_MESSAGE); 
       attendance[x] = Integer.parseInt(JOptionPane.showInputDialog(null, "How many matchs have he played so far? ", "Attendance", JOptionPane.INFORMATION_MESSAGE)); 
       x++; 
      } 
      else if(control == 2) 
        for (int i=0; i < players.length; i++){ 
        JOptionPane.showMessageDialog(null, "Attendance = " + attendance[i], "N: " + i + "- " + players[i], JOptionPane.WARNING_MESSAGE);  
        } 
       else if(control == 3){ 
         posPlayer = Integer.parseInt(JOptionPane.showInputDialog(null, "Choose the player id: ", "Player Id", JOptionPane.INFORMATION_MESSAGE)); 
         attendance[posPlayer] = Integer.parseInt(JOptionPane.showInputDialog(null, "Increment ", "Attendance", JOptionPane.INFORMATION_MESSAGE)); 
        }     
    } 

} 

}

+0

究竟什麼是你的問題?你的代碼已經列出了所有玩家的出席情況,不是嗎? – Howard

+0

如果您使用的是Java的最新版本不夠,看看在for-each循環結構:'爲(X型:listOfXs){...}',而不是手動遍歷數組過來,讓每個元素。使用@ dogbane的建議,使其更加正確的OO將使這個微不足道的,並大大減少由樣板代碼造成的混亂。 –

+0

另外,只是一個建議,但解決您的壓痕(也許whitespacing以及)。如果您一致地縮進(不管縮進的方式如何),而不是像現在這樣隨意縮進,它將使代碼更容易閱讀。 –

回答

1

不是有兩個陣列;一個球員和一個用於考勤,使你的代碼更通過創建Player類封裝球員的名字和出勤面向對象:

public class Player { 
    private final String name; 
    private final int attendance; 

    public Player(String name, int attendance) { 
     this.name = name; 
     this.attendance = attendance; 
    } 

    public String getName() { 
     return name; 
    } 

    public int getAttendance() { 
     return attendance; 
    } 
} 

然後創建Player對象,並將其存儲在一個ArrayList。除非你知道有多少玩家將被添加,否則不要使用陣列。

List<Player> players = new ArrayList<Player>(); 

if (control == 1) { 
    String name = JOptionPane.showInputDialog(null, "New player: ", "Add New Player", 
      JOptionPane.INFORMATION_MESSAGE); 
    int attendance = Integer.parseInt(JOptionPane.showInputDialog(null, 
      "How many matchs have he played so far? ", "Attendance", JOptionPane.INFORMATION_MESSAGE)); 
    Player player = new Player(name, attendance); 
    players.add(player); 

} else if (control == 2) { 
    for (int i = 0; i < players.size(); i++) { 
     Player player = players.get(i); 
     JOptionPane.showMessageDialog(null, "Attendance = " + player.getAttendance(), "N: " + i + "- " + player.getName(), 
       JOptionPane.WARNING_MESSAGE); 
    }     
} 
+0

這是一個很好的解決方案。我花了一段時間才明白,因爲我是初學者。關於代碼寫在哪裏的疑問Player player = player.get(i);你是否從Player類創建另一個對象。如果我是對的,爲什麼你不需要使用新的?非常感謝LO – Camus

+0

'Player播放器= players.get(I);在''索引i'從'players'數組列表返回播放器。它不創建新的對象,但從列表中檢索現有的對象。 – dogbane

+0

所以爲什麼我們需要寫播放器(這是一個類),而不是隻用播放器= player.get(我); ? – Camus