【发布时间】:2014-05-28 00:26:24
【问题描述】:
现在我必须编写一个代码,为每个collectedDots打印出“*”,但是如果它没有收集任何collectedDots == 0,那么它会打印出“”。使用太多 if 语句看起来很乱,我在想在这种情况下如何实现 forloop。
【问题讨论】:
现在我必须编写一个代码,为每个collectedDots打印出“*”,但是如果它没有收集任何collectedDots == 0,那么它会打印出“”。使用太多 if 语句看起来很乱,我在想在这种情况下如何实现 forloop。
【问题讨论】:
你几乎是正确的。只需要改变循环的范围限制。循环初始值设置为 1。因此,当您收集的点数 = 0 时,它不会进入循环并返回“”,因为星星在循环前用“”初始化。
String stars = "";
for (int i =1; i <= collectedDots; i++)
{
stars = "*";
System.out.print(stars);
}
return stars;
【讨论】:
好的,所以您已经有了一个名为collectedDots 的变量,它是一个告诉您要打印多少颗星的数字?
所以你的循环会是这样的
for every collected dot
print *
但是你不能只打印出来,你需要返回一个将被打印出来的字符串。所以更像是
for every collected dot
add a * to our string
return the string
到目前为止,这与您的尝试之间的主要区别在于,您每次通过循环时都将星号分配为您的字符串,然后在循环结束时,您返回该字符串 - 无论您分配多少次给字符串加星,字符串总是只有一颗星。
您还需要一个单独的变量来跟踪您的循环,这应该可以解决问题:
String stars = "";
for(int i = 0; i < collectedDots; i++)
{
stars = stars + "*";
}
return stars;
【讨论】:
作为一般原则,您在这里所做的那种重新排列是好的。您已经找到了一种以一般方式而不是一系列特殊情况来表达规则的方法。这更容易推理和检查,而且显然可以扩展到超过 3 个点的情况。
您可能在混淆目标数和迭代值时犯了一个错误,我假设 collectDots 包含您拥有的点数(根据您的 if 语句),因此您需要引入一个变量来计数价值
for (int i =0; i <= collectedDots; i++)
{
stars = "*";
System.out.print(stars);
}
【讨论】: