簡體   English   中英

Java,把char改成string

[英]Java, change char to string

import java.util.Random;

public class PickTwoCards {

    final static int CardNumbers = 13;
    final static char[] Types = {'c','h','d','s'};

    public static void main(String args[]){
        Card CardOne = ChooseCard();
        System.out.println("*****Welcome to the House of Cards*****");
        System.out.println("My card is the "+CardOne.GetNumber()+" of "+CardOne.GetType());
    
        Card CardTwo = ChooseCard();
        System.out.println("My card is the "+CardTwo.GetNumber()+" of "+CardTwo.GetType());
    }

    public static Card ChooseCard(){
        Card card = new Card();
        card.SetType(RandomType());
        card.SetNumber(RandomNumber());
        return card;
    }

    public static char RandomType(){
        int RandomTypeKeep = new Random().nextInt(Types.length);
        char RandomType = Types[RandomTypeKeep];
        return RandomType;
    }

    public static int RandomNumber(){
        int RandomCardNumber = ((int)(Math.random()*100)%CardNumbers+1);
        return RandomCardNumber;
    }
}
public class Card {

    private static char type;
    private static int number;

    public static char GetType() {
        return type;
    }

    public static void SetType(char type) {
        Card.type = type;
    }

    public static int GetNumber() {
        return number;
    }

    public static void SetNumber(int number) {
        Card.number = number;
    }
}

結果應該是:

*****Welcome to the House of Cards*****.
My card is the 3 of Spade.
My card is the 2 of Diamond.

我不知道如何將我的結果值設為像“Diamond”這樣的字符串,而不是“d”。

放下static 這不是它應該如何使用,在這種情況下不會幫助你。 實際上,無論您如何更改,每張Card都將具有相同的價值。

您可以添加description方法,將char轉換為人類可讀的String ,例如

public class Card {

    private char type;
    private int number;

    public char getType() {
        return type;
    }

    public void setType(char type) {
        this.type = type;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
    
    public String getTypeDescription() {
        switch (getType()) {
            case 'c': return "Clubs";
            case 'h': return "Hearts";
            case 'd': return "Dimonds";
            case 's': return "Spads";
        }
        
        return "---";
    }
}

為什么不直接重寫toString

. 恕我直言,人們過早地使用toString方式並濫用它。 現在問問自己,如果您還想在不同點(而不是所有時間)顯示suitnumber會怎樣? 您不能修改toString來執行此操作,並且您已將其使用限制在單個用例中。 因此,相反,我們為開發人員提供了更好地決定他們想要什么的方法,而不是將其強加給他們。

就個人而言, toString對調試非常非常有用。

現在,如果你真的想做一些“花哨”的事情,你可以用自定義的toString方法創建一個Suit enum ......

enum Suit {
    CLUBS {
        @Override
        public String toString() {
            return "Clubs";
        }
    },
    HEARTS {
        @Override
        public String toString() {
            return "Hearts";
        }
    },
    DIAMONDS {
        @Override
        public String toString() {
            return "Diamonds";
        }
    }, SPADES {
        @Override
        public String toString() {
            return "Spades";
        }
    };
}

然后更新Card class就可以支持了...

public class Card {

    private Suit type;
    private int number;

    public Suit getType() {
        return type;
    }

    public void setType(Suit type) {
        this.type = type;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}

然后你就可以使用它了...

Card card = new Card();
card.setType(Suit.CLUBS);

System.out.println(card.getType());

但是現在你重寫了toString ,我很困惑

是的,我不怪你。 對於每個規則,都有一個例外

如果您查看enum的 JavaDocs,它實際上指出:

大多數程序員應該優先使用 toString() 方法而不是這個方法,因為 toString 方法可能會返回一個對用戶更友好的名稱

在這種特殊情況下,您不太可能想要更改從toString返回的內容。 如果你更願意返回一個表情符號,那么我實際上會通過單獨的方法提供它,但那就是我

暫無
暫無

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

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