4 回答

TA貢獻1829條經驗 獲得超6個贊
您可以嘗試在您的方法中進行以下更改public static int getMatchPoints(String word):
for (int i = 0; i < word.length(); i++) {
String letter = word.substring(i, i + 1);
if (letter.equals("W")) {
points+=3;
}
else if (letter.equals("D")) {
points+=1;
}
}
word.substring(i, i + 1)將得到一個單字母單詞,并將幫助您按照您想要的方式計算分數。

TA貢獻1842條經驗 獲得超21個贊
如果你想讓它變得非常簡單,你可以使用String.toCharArray()然后遍歷數組char并檢查它的值:
public static int getMatchPoints(String word) {
int points = 0;
char[] arr = word.toCharArray();
for (char letter : arr) {
if (letter == 'W') {
points += 3;
}
else if (letter == 'D') {
points += 1;
}
}
return points;
}
我還刪除了您的else語句,因為那只是將值設置為0循環中是否有其他字母。我想你打算讓它points += 0什么都不做,所以它可以被刪除。
示例運行:
輸入:
字串 = "LDWWL";
輸出:
7
注意: 我知道您可能不允許使用此解決方案,但我認為這將是有關可能性的好信息,因為它在技術上不使用charAt()
另外我想指出你誤解了什么substring(5)。這將返回位置之后的所有字符5作為單個String,它不會將分隔成String不同的字符或任何東西。

TA貢獻2041條經驗 獲得超4個贊
你會發現你的可變字母始終是空字符串。這是一種更好的做事方式:
class WDLPoints
{
public static void main(String[] args)
{
String word = "LDWWL";
System.out.println(getMatchPoints(word));
}
// We have only one method to encode character values, all in one place
public static int getValueForChar(int c)
{
switch((char)c)
{
case 'W': return 3;
case 'D': return 1;
default: return 0; //all non-'W's and non-'D's are worth nothing
}
}
public static int getMatchPoints(String word)
{
// for all the characters in the word
return word.chars()
// get their integer values
.map(WDLPoints::getValueForChar)
// and sum all the values
.sum();
}
}

TA貢獻1757條經驗 獲得超7個贊
假設您的字符串代表最近 5 場比賽的足球隊表現,您可以使用以下內容使其簡單易讀:
public static int getMatchPoints(String word) {
String converted = word.replace('W', '3').replace('D', '1').replace('L', '0');
return converted.chars().map(Character::getNumericValue).sum();
}
這會將您的示例輸入“LDWWL”轉換為“01330”,并通過獲取其數值對每個字符求和。
添加回答
舉報