Java 阵列列表或操作系统有更好的方法吗?
多亏了这里的优秀员工,我成功地得到了一些半可行的东西,仍然有一些错误,但也许你们可以帮我解决。到目前为止,所提供的解决方案中没有一个是完全匹配的(这就是为什么我没有投票支持他们),但它们确实帮助我以新的方式看待事情,并推动事情向前发展。这就是当前的问题 首先是代码,然后是解释Java 阵列列表或操作系统有更好的方法吗?,java,arrays,multidimensional-array,arraylist,Java,Arrays,Multidimensional Array,Arraylist,多亏了这里的优秀员工,我成功地得到了一些半可行的东西,仍然有一些错误,但也许你们可以帮我解决。到目前为止,所提供的解决方案中没有一个是完全匹配的(这就是为什么我没有投票支持他们),但它们确实帮助我以新的方式看待事情,并推动事情向前发展。这就是当前的问题 首先是代码,然后是解释 RaceButtons[RaceCounter] = new JToggleButton(); RaceButtons[RaceCounter].setIc
RaceButtons[RaceCounter] = new JToggleButton();
RaceButtons[RaceCounter].setIcon(RCiconSM);
RaceButtons[RaceCounter].setBorder(BorderFactory.createEmptyBorder());
RaceButtons[RaceCounter].setContentAreaFilled(false);
RaceButtons[RaceCounter].setActionCommand(temp_race.getRaceNameString(RaceCounter));
RaceButtons[RaceCounter].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
Race race = new Race(1, 1, GenderList[PHYSICAL_SEX]);
race.setRaceID(race.getRaceIDFromString(ae.getActionCommand()));
//System.out.println(race.getraceID());
if (RaceButtons[race.getraceID()].isSelected()){
RaceButtons[race.getraceID()].setBorderPainted(true);
RaceButtons[race.getraceID()].setBorder(new LineBorder(Color.blue,2));
MyRaceArray.add(new Race(race.getraceID(), 1, GenderList[PHYSICAL_SEX]));
}else{
RaceButtons[race.getraceID()].setBorderPainted(false);
};
因此,首先我创建了一个切换按钮数组,当你点击它时,它会绘制边界,然后获取它的信息,我可以将它添加到比赛数组中,但这给我带来了另一个问题,我无法完全理解逻辑。但是,如果已经选择了按钮,它会向按钮添加另一个实例,它不应该这样做,它应该忽略IEX现有条目,但这意味着我必须检查arry中是否存在具有相同信息的Race类型的匹配对象,对吗?最好的方法是什么?
当您取消选择它时,我如何删除相同的对象。您可以使用数组列表使其工作,但从长远来看,这可能不是最好的方法。它可能非常复杂,并且容易出错——当您插入一个新的种族或属性,但忘记在某个地方更改索引时会发生什么 数组和ArrayList通常最好保留在实际有序列/列表(通常具有有意义的序列顺序)的情况下 对你来说,我更倾向于采用一种新的方法。通常,在Java中,您可以使用一个
HashMap
(或包含HashMap的数据结构)来表示每个种族,该映射表示“属性ID”和“默认值”之间的关系
创建一个新的elf只是使用其种族的默认值(或者不同种族的平均值,如果需要…)初始化elf属性的一个例子
有些人可能会建议创建一个包含许多命名字段的OOP类。这也可以工作,但是原型模型更好——从长远来看,它给了你更多的灵活性。您通常希望以某种方式处理大量属性组,如果必须单独引用每个属性字段,那么这样做会非常麻烦。您可以使用数组列表使其正常工作,但从长远来看,这可能不是最好的方法。它可能非常复杂,并且容易出错——当您插入一个新的种族或属性,但忘记在某个地方更改索引时会发生什么 数组和ArrayList通常最好保留在实际有序列/列表(通常具有有意义的序列顺序)的情况下 对你来说,我更倾向于采用一种新的方法。通常,在Java中,您可以使用一个
HashMap
(或包含HashMap的数据结构)来表示每个种族,该映射表示“属性ID”和“默认值”之间的关系
创建一个新的elf只是使用其种族的默认值(或者不同种族的平均值,如果需要…)初始化elf属性的一个例子
有些人可能会建议创建一个包含许多命名字段的OOP类。这也可以工作,但是原型模型更好——从长远来看,它给了你更多的灵活性。您通常希望以某种方式处理大量属性组,如果您必须单独引用每个属性字段,那么这样做会非常麻烦。这就是您的代码在种族类中的外观:
import java.util.ArrayList;
import java.util.List;
public class Race {
private int raceID;
private double purity;
private int strMod;
private int dexMod;
private int conMod;
private int wisMod;
public int getRaceID() {
return raceID;
}
public void setRaceID(int raceID) {
this.raceID = raceID;
}
public double getPurity() {
return purity;
}
public void setPurity(double d) {
this.purity = d;
}
public int getStrMod() {
return strMod;
}
public void setStrMod(int strMod) {
this.strMod = strMod;
}
public int getDexMod() {
return dexMod;
}
public void setDexMod(int dexMod) {
this.dexMod = dexMod;
}
public int getConMod() {
return conMod;
}
public void setConMod(int conMod) {
this.conMod = conMod;
}
public int getWisMod() {
return wisMod;
}
public void setWisMod(int wisMod) {
this.wisMod = wisMod;
}
@Override
public String toString() {
return "Race [raceID=" + raceID + ", purity=" + purity + ", strMod="
+ strMod + ", dexMod=" + dexMod + ", conMod=" + conMod
+ ", wisMod=" + wisMod + "]";
}
public static void main(String args[]) {
//create a list of race objects
List<Race> raceCollection = new ArrayList<Race>();
//create a race object
Race race = new Race();
race.setRaceID(1);
race.setPurity(0.75);
race.setStrMod(5);
race.setDexMod(7);
race.setConMod(-2);
race.setWisMod(3);
//add race object to collection
raceCollection.add(race);
//You can create and add multiple objects of race to the collection
//Iterate your list and print the objects
for(Race raceObj:raceCollection) {
System.out.println(raceObj);
}
}
}
import java.util.ArrayList;
导入java.util.List;
公共级别比赛{
内总状花序;
私人双纯度;
私人国际标准;
私有int dexMod;
私人int conMod;
私人智能智能手机;
public int getRaceID(){
返回总状花序;
}
公共无效setRaceID(int raceID){
此。外消旋体=外消旋体;
}
公共双精度{
返回纯度;
}
公共空间(双d){
这是纯度=d;
}
public int getStrMod(){
返回strMod;
}
公共无效设置TRMOD(int strMod){
this.strMod=strMod;
}
public int getDexMod(){
返回dexMod;
}
公共无效setDexMod(int-dexMod){
this.dexMod=dexMod;
}
公共int getConMod(){
返回conMod;
}
公共无效setConMod(int-conMod){
this.conMod=conMod;
}
public int getWisMod(){
返回wisMod;
}
公共无效setWisMod(int wisMod){
this.wisMod=wisMod;
}
@凌驾
公共字符串toString(){
return“Race[raceID=“+raceID+”,purchy=“+purchy+”,strMod=”
+strMod+”,dexMod=“+dexMod+”,conMod=“+conMod
+“,wisMod=“+wisMod+”]”;
}
公共静态void main(字符串参数[]){
//创建竞赛对象列表
List raceCollection=新的ArrayList();
//创建竞赛对象
种族=新种族();
小种.刚毛状体(1);
小种。毛纯度(0.75);
种族。设置TRMOD(5);
种族。setDexMod(7);
race.setConMod(-2);
赛特维斯莫德(3);
//将种族对象添加到集合
racecolection.add(race);
//您可以创建多个竞赛对象并将其添加到集合中
//迭代列表并打印对象
用于(赛车OBJ:赛车系列){
系统输出打印LN(raceObj);
}
}
}
这是您的代码在种族等级中的外观:
import java.util.ArrayList;
import java.util.List;
public class Race {
private int raceID;
private double purity;
private int strMod;
private int dexMod;
private int conMod;
private int wisMod;
public int getRaceID() {
return raceID;
}
public void setRaceID(int raceID) {
this.raceID = raceID;
}
public double getPurity() {
return purity;
}
public void setPurity(double d) {
this.purity = d;
}
public int getStrMod() {
return strMod;
}
public void setStrMod(int strMod) {
this.strMod = strMod;
}
public int getDexMod() {
return dexMod;
}
public void setDexMod(int dexMod) {
this.dexMod = dexMod;
}
public int getConMod() {
return conMod;
}
public void setConMod(int conMod) {
this.conMod = conMod;
}
public int getWisMod() {
return wisMod;
}
public void setWisMod(int wisMod) {
this.wisMod = wisMod;
}
@Override
public String toString() {
return "Race [raceID=" + raceID + ", purity=" + purity + ", strMod="
+ strMod + ", dexMod=" + dexMod + ", conMod=" + conMod
+ ", wisMod=" + wisMod + "]";
}
public static void main(String args[]) {
//create a list of race objects
List<Race> raceCollection = new ArrayList<Race>();
//create a race object
Race race = new Race();
race.setRaceID(1);
race.setPurity(0.75);
race.setStrMod(5);
race.setDexMod(7);
race.setConMod(-2);
race.setWisMod(3);
//add race object to collection
raceCollection.add(race);
//You can create and add multiple objects of race to the collection
//Iterate your list and print the objects
for(Race raceObj:raceCollection) {
System.out.println(raceObj);
}
}
}
import java.util.ArrayList;
导入java.util.List;
公共级别比赛{
内总状花序;
私人双纯度;
私人国际标准;
私有int dexMod;
私人int conMod;
私人智能智能手机;
public int getRaceID(){
返回总状花序;
}
公共无效setRaceID(int raceID){
此。外消旋体=外消旋体;
}
公共双精度{
返回纯度;
}
公共空间(双d){
class RacePanel implements ActionListener
{
private Map<Integer,JToggleButton> r;
private Map<Integer,Race> f;
public RacePanel()
{
r = new TreeMap<Integer,JToggleButton>();
f = new TreeMap<Integer,Race>();
}
public JToggleButton add (Race a)
{
JToggleButton button = new JToggleButton();
button.setIcon(RCiconSM);
button.setBorder(BorderFactory.createEmptyBorder());
button.setContentAreaFilled(false);
button.setActionCommand(a.getRaceID());
button.addActionListener(this);
r.put(a.getRaceID, button);
f.put(a.getRaceID, a);
}
public void remove (int raceID)
{
r.remove(a.getRaceID);
f.remove(a.getRaceID);
}
// When a button is clicked
public void actionPerformed(ActionEvent e)
{
// related race
Race a = f.get(e.getActionCommand());
// clicked button
JToggleButton b = r.get(e.getActionCommand());
// ..
}
public ArrayList<JToggleButton> getButtonList ()
{
return new ArrayList<Value>(r.values());
}
public ArrayList<Race> getRaceList ()
{
return new ArrayList<Value>(f.values());
}
public Race getRace (int raceID)
{
return f.get(raceID);
}
public JToggleButton getButton (int raceID)
{
return r.get(raceID);
}
// ..
}