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