簡體   English   中英

需要在 Java 中解析輸入的指導,需要專門使用類,很難理解構造函數

[英]Need Guidance on Parsing an Input in Java, Need to Specifically Use Classes, having a Hard time understanding Constructors

我要完成的作業如下; 我不需要完整的答案,但任何形式的幫助或指導都會很好,因為我的教授正在回避我的問題。 太感謝了! 盡我所能掌握這些概念。 下面是作業: 創建一個名為 PlayCards 的程序。 這個類將使用另一個名為 Card 的類。 將兩個類放在同一個文件中,但將程序創建為“PlayCards”。

創建一個表示撲克牌的類(稱為 Card)和另一個使用此類的類(稱為 PlayCards)。

卡片將有兩個字段:等級和花色。 對等級和花色都使用整數。 對於等級,使用值 2 到 10 表示等級 2 到 10,11 代表傑克,12 代表皇后,13 代表國王,14 代表王牌。 對於花色,梅花使用 0,方塊使用 1,紅心使用 2,黑桃使用 3。

只有 PlayCards 類有 main() 方法。 此方法應讀取“7-S KH 2-H 4-C JD”形式的參數。 每個 arg 代表一張卡片。 第一部分是等級,第二部分是花色。 C代表梅花,D代表方塊,H代表紅心,S代表黑桃。

對於每個 arg,您的程序必須解析 arg,創建一個表示卡片的 Card 對象。 例子:

4♥國王♣2♠皇后♦10♣

要打印西裝符號,請使用“♥”、“♣”、“♠”和“&diamonds;”

到目前為止,這是我的代碼:

class PlayCards
{
    public static void main(String[] args)
    {
        Card c1 = new Card(17, 3);
    }
}
class Card
{
    private int Rank;
    private int Suit;

    public Card() {
        //Declaring of Object
    }

     public Card(int Rank, int Suit) {
        if (14 < Rank || Rank < 2) {
            System.out.println("Error: This Card does not exist.")
        }
        System.out.println("Hi from the Card Constructor. The Key to successful completion of this assignment.");
        this.Rank = Rank;
        this.Suit = Suit;
    }
}

** 我知道它很小,但這只是因為我廢棄了我擁有的另一個文件以重新開始。 我有一種方法可以用 If 語句檢測字符的存在,但我很難過,因為它需要用 Objects 和一個額外的 Class 來完成。 一如既往地感謝任何花時間幫助的人,這總是令人感激的! - 協同作用

對於任何 java 程序,main 方法是第一個被執行的線程。 您可以將其視為代碼的入口點。 現在,在您的情況下,主要方法存在於 PlayCards 類中,因此它首先被執行。 現在,此方法可以通過為其指定的參數與外部世界進行交互。 這些參數通過名為 args 的字符串數組傳遞給代碼。 您可以看到它作為 main 方法的參數出現。

現在您可以單獨訪問每個參數,如 args[0]、args[1] 等。 由於這些元素中的每一個都是一個字符串,因此您可以在它們之上執行內置的字符串操作。 split() 就是這樣一種方法。 字符串標記器就是這樣一個類。 您可以在 java 文檔上閱讀更多關於它們的信息。

將“7-H”之類的參數拆分為“7”和“H”后,您可以使用類似 parseInt() 方法的方法直接將 Integer 解析為字符串。 同樣,您應該在線閱讀文檔。 現在您已將“7”轉換為 7,您可以使用替換或其他方式將“H”替換為其等值數。

從這里開始對你來說應該很容易。

分配任務

  • 在作業中,假設您必須制作兩個由main功能組成的PlayingCards類,因此它將是 runner 類和Card ,它將有兩個整數成員ranksuit
  • 輸入將是格式為7-H 4-S AS KD的字符串,其中每張卡片由空格分隔。
  • 任務是將每張卡片轉換為Card對象

方法

  • 首先,通過空格分割字符串,將輸入字符串轉換為不同卡片字符串的數組。
  • 拆分后,數組應類似於["7-H", "4-S", "AS", "KD"]
  • 現在,遍歷數組並用連字符再次分割每個卡片串,這將給出等級串花色串
  • 現在,切換rank-stringsuit-string以獲得ranksuit
  • 最后,使用ranksuit創建Card對象

解決方案

進口

import java.util.ArrayList;

班級卡

class Card {
    private final int rank;
    private final int suit;

    Card(int rank, int suit) {
        this.rank = rank;
        this.suit = suit;
    }

    public String getCardDetails() {
        String rankString;
        if (rank > 1 && rank <= 10) {
            rankString = String.valueOf(rank);
        } else {
            rankString = switch (rank) {
                case 11 -> "Jack";
                case 12 -> "Queen";
                case 13 -> "King";
                case 14 -> "Ace";
                default -> "🚫";
            };
        }
        String suitSymbol = switch (suit) {
            case 0 -> "♣";
            case 1 -> "♦";
            case 2 -> "♥";
            case 3 -> "♠";
            default -> "🚫";
        };
        return String.format("%s %s", rankString, suitSymbol);
    }
}

類撲克牌

public class PlayCards {
    public static void main(String[] args) {
        String input = "7-S K-H 2-H 4-C J-D";
        String[] inputs = input.split(" ");

        ArrayList<Card> cards = new ArrayList<>();

        for (String in : inputs) {
            String[] temp = in.split("-");

            int rank = switch (temp[0].charAt(0)) {
                case 'J' -> 11;
                case 'Q' -> 12;
                case 'K' -> 13;
                case 'A' -> 14;
                default -> Integer.parseInt(temp[0]);
            };
            int suit = switch (temp[1]) {
                case "S" -> 0;
                case "D" -> 1;
                case "H" -> 2;
                case "C" -> 3;
                default -> -1;
            };
            Card card = new Card(rank, suit);
            cards.add(card);
        }

        for (Card card : cards) {
            System.out.println(card.getCardDetails());
        }
    }
}

輸出

7♣
King♥
2♥
4♠
Jack♦

沒有split()函數的拆分字符串

String input = "7-S K-H 2-H 4-C J-D";
ArrayList<String> subStrings = new ArrayList<>();
int begin = 0, forward;
for (int i = 0; i < input.length(); i++) {
    if (input.charAt(i) == ' ') {
    forward = I;

    StringBuilder str = new StringBuilder();
    for (int j = begin; j < forward; j++) {
        str.append(input.charAt(j));
    }
    begin = i + 1;
    subStrings.add(String.valueOf(str));
    }
}
StringBuilder str = new StringBuilder();
for (int k = begin; k < input.length(); k++) {
    str.append(input.charAt(k));
}
subStrings.add(String.valueOf(str));

輸出

[7-S, K-H, 2-H, 4-C, J-D]

暫無
暫無

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

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