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”,并通过获取其数值对每个字符求和。
添加回答
举报