簡體   English   中英

正確的方法是什么?

[英]What is the correct way to do this?

我知道這肯定是一個基本的設計問題,因為我顯然做不到。 我想根據分配給OwnedSpirits(int)的整數值從另一個類調用ownGrokk,ownTyce等方法。 依次填充數組。

問題是,我多次這樣做,並且在另一個類中進行此操作似乎每次都要傳遞新的int參數時都必須創建一個新對象,這樣做會重置spiritInstance的值。 並且,由於將其重置為零,因此數組無法正確填充。 我稍后嘗試打印出我的數組值,並得到“ ArrayIndexOutOfBoundsException”。

public class OwnedSpirits {       
    private int spiritTypeInt = 0;

    public static int spiritInstance=0;                                                  
    public static int[] spiritarray = new int[9];
    public static String[] spiritName = new String[9];
    public static int[] party = new int[3];

    public OwnedSpirits(int spiritcall){
        if(spiritcall == 1){
            ownGrokk();
        }     
        if(spiritcall == 2){
            ownRisp();
        }
        if(spiritcall == 3){
            ownTyce();
        }
        if(spiritcall == 4){
            ownDaem();
        }
        if(spiritcall == 5){
            ownCeleste();
        }
    }

    private void ownGrokk(){ 
        spiritName[spiritInstance] = "Grokk";
        spiritInstance++;                
    }

    private void ownRisp(){     
        spiritName[spiritInstance] = "Risp";
        spiritInstance++;              
    }

    private void ownDaem(){ 
        spiritName[spiritInstance] = "Daem";
        spiritInstance++;      
    }

    private void ownCeleste(){ 
        spiritName[spiritInstance] = "Celeste";
        spiritInstance++;          
    }

    private void ownTyce(){ 
        spiritName[spiritInstance] = "Tyce";
        spiritInstance++; 
    }

並且此代碼在另一個類中,在該類中它嘗試調用方法以填充數組

buttonConfirm.addListener(new ClickListener(){
    @Override
    public void clicked(InputEvent event, float x, float y) {                                
        if(xcounter==3){
            for(x=0; x<3; x++){
                if(setdaemtrue == true){
                    new OwnedSpirits(4);
                }
                if(setrisptrue == true){
                    new OwnedSpirits(2);
                }
                if(setcelestetrue == true){
                    new OwnedSpirits(5);
                }
                if(settycetrue == true){
                    new OwnedSpirits(3);
                }
                if(setgrokktrue == true){
                    new OwnedSpirits(1);
                }    
            }
        }
    }
});   

最后是另一堂課:

System.arraycopy(OwnedSpirits.spiritName, 0, partylist, 0, 3);

@Override
public void show() {
    System.out.println(partylist[0]);
    System.out.println(partylist[1]);
    System.out.println(partylist[2]);

    spiritlist.setItems(partylist);
    table.add(spiritlist);
    table.setFillParent(true);
    stage.addActor(table);      
}

如果最后一部分令人困惑,那是因為我正在使用libgdx。 打印語句只是為了找出我的列表為什么有錯誤

我可以告訴您我將如何處理精神和聚會。 Spirit類包含名稱和指定給以下對象的當事方:

package com.stackoverflow.spirit;

public class Spirit {
    private String name;
    private Party party;
    private SpiritType type;
    private static int id = 0;

    public static enum SpiritType {
        Grokk, Risp, Tyce, Daem, Celeste
    };

    public Spirit(String name, SpiritType type) {
        create(name, type);
    }

    public Spirit(SpiritType type) {
        create(null, type);
    }

    // This is to handle Java inexistance of default parameter values.
    private void create(String name, SpiritType type)
    {
        Spirit.id++;

        this.name = (name == null) ? (type.name() + " " + id) : name;
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public Party getParty() {
        return party;
    }

    public SpiritType getType() {
        return type;
    }

    /**
     * Used internally by @see Party
     * @param party the party this Spirit belongs
     */
    public void setParty(Party party) {
        this.party = party;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString()
    {
        return this.name;
    }
}

最后,Party類包含一組Spirits,您可以在Party中添加和刪除Spirits。

package com.stackoverflow.spirit;

import java.util.HashSet;

public class Party {
    private HashSet<Spirit> spirits = new HashSet<Spirit>();
    private static int id = 0;
    private String name = "Party " + Party.id++;;

    public Party() {
    }

    public Party(String name) {
        this.name = name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void add(Spirit spirit) {
        if (!spirits.contains(spirit)) {
            spirits.add(spirit);

            if (spirit.getParty() != null) {
                //Remove from previous party to update the other party set
                spirit.getParty().remove(spirit);
            }
            spirit.setParty(this);
        } else {
            // throw new SpiritAlreadyOnParty();
        }
    }


    public void remove(Spirit spirit)
    {
        if (spirits.contains(spirit))
        {
            spirit.setParty(null); // You could create a default empty party for "Nature/Neutral" Spirits perhaps :)
            spirits.remove(spirit);
        }
        else {
            //throw new SpiritNotInParty();
        }
    }

    public boolean isOnParty(Spirit spirit) {
        return spirits.contains(spirit);
    }

    public ArrayList<Spirit> getSpirits()
    {
        return new ArrayList<Spirit>(spirits);
    }

    public int getPartySize() {
        return spirits.size();
    }

    public String getPartyInfo()
    {
        StringBuilder builder = new StringBuilder();

        builder.append("Party:" + this.name + " Size:" + this.spirits.size() + "\n");
        for (Spirit s : spirits)
        {
            builder.append(s.getName() + "\n");
        }
        return builder.toString();
    }


    @Override
    public String toString()
    {
        return this.name;
    }
}

在這里,我使用Spirit和Party類,您可以添加更多功能,例如用於聚會強度的屬性,聚會上的魔法增益等:

package com.stackoverflow.spirit;

import com.stackoverflow.spirit.Spirit.SpiritType;

public class Main {
    public static void main(String[] args) throws java.lang.Exception {
        Party griffindor = new Party("Griffindor"), slytherin = new Party(
                "Slytherin");

        // You can also do for (SpiritType type : SpiritType.values() then
        // type.ordinal()
        for (int i = 0; i < SpiritType.values().length; i++) {
            griffindor.add(new Spirit(SpiritType.values()[i]));
            slytherin.add(new Spirit(SpiritType.values()[i]));
        }

        Spirit mySpirit = new Spirit("NotAHPFan", SpiritType.Celeste);

        slytherin.add(mySpirit);

        System.out.println("Name of party:" + mySpirit.getParty().getName());
        System.out.println("Is on griffindor?:"
                + griffindor.isOnParty(mySpirit));

        // What now?
        griffindor.add(mySpirit);
        System.out.println("Is " + mySpirit.getName() + " on "
                + slytherin.getName() + "?:" + slytherin.isOnParty(mySpirit));

        System.out.println(mySpirit.getName() + " is now on "
                + mySpirit.getParty() + "\n");


        System.out.println(griffindor.getPartyInfo());
        System.out.println(slytherin.getPartyInfo());
    }
}

PD:我不是惠普迷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM