[英]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
,它将有两个整数成员rank
和suit
。7-H 4-S AS KD
的字符串,其中每张卡片由空格分隔。Card
对象["7-H", "4-S", "AS", "KD"]
。rank
和suit
rank
和suit
创建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.