我在编程时经常遇到的一个问题是如何处理未知数量的对象。处理我的意思是引用它们,操纵它们等等。至于我,这将是在开发较小的游戏和程序时。
目前我正在开发一个记分程序,它应该显示球员的姓名、他们的得分以及其他各种功能。此外,应该有两个按钮允许从计分表中添加和删除玩家,这是我在这里要关注的。它可能看起来像这样:
//A very limited version of my program
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class Application extends JFrame implements ActionListener{
//Fields, variables and components
Container mainCont = getContentPane(); //Main container, the window itself
private JPanel buttonPanel;
private JPanel namePanel;
private JButton addPlayerButton;
private JButton removePlayerButton;
//...
//Many more components
public Application(){
//Basic window initiation
setTitle("Score Keeper");
this.setSize(650, 700);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainCont.setBackground(Color.BLACK);
this.setContentPane(mainCont);
buttonPanel = new JPanel();
namePanel = new JPanel();
addPlayerButton = new JButton();
addPlayerButton.addActionListener(this);
buttonPanel.add(addPlayerButton);
removePlayerButton = new JButton();
removePlayerButton.addActionListener(this);
buttonPanel.add(removePlayerButton);
}
}
}
到目前为止一切都很好。这个程序基本上只有两个按钮,其中 addPlayerButton 添加了一个播放器对象,该对象的名称显示在屏幕上。每次按下此按钮时,都会在屏幕上添加一个新玩家。这可以无限次地完成。
当我们想要移除一个玩家时,问题就来了。我们怎样才能做到这一点?我们不能按名称引用它,因为所有玩家对象实际上都是匿名的。
然后我们就可以直接寻址每个玩家对象,但这太不切实际了。我们不能添加比预定义数量更多的玩家,如果我们想要更少的玩家,我们会有一堆从未使用过的玩家对象。此外,我们必须对每个玩家的每次启动进行硬编码 - 每个 nameLabel 都必须手动添加到屏幕等。
请分享您如何处理此类问题的知识,以及您如何处理未知数量的对象。感谢您抽出宝贵时间和帮助!
PS 我对这个论坛还是很陌生。请让我知道这个问题是否有任何我可以改变的地方等。我做了我的研究,没有发现以前的问题可以解决这个问题,但如果有我错过的问题,请随时告诉我!
编辑1:好的。有很多很棒的答案。我选择使用 hashmaps 作为正确的解决方案,因为我认为这是我提供的前提的最佳解决方案。我实际解决我的问题的方法是,我向播放器对象添加了一个 JButton,用于删除存储它的播放器对象。我还取消了为播放器使用嵌套类的概念,并在单独的类中实现它. 不过,我从总体上学到的是,在处理对象并且您不知道对象的数量时,通常最好将它们存储在某种集合中。我的偏好是 Hashmap,因为它提供了一种基于对象属性(如字符串名称或类似属性)访问对象的简单方法。
扬帆大鱼
绝地无双
小唯快跑啊
相关分类