Java “没有结果”;倒计时“;环
我收到了这样的声明:Java “没有结果”;倒计时“;环,java,for-loop,Java,For Loop,我收到了这样的声明: public String countDown(int start, int end, int increment) 我正在寻找一个输出,可以提供: (10 8 6 4) 如果使用start=10、end=3和increment=2调用了countDown。它将继续递减2,直到到达终点 我知道如何构造for循环,只是不知道如何让它与字符串一起工作 以下是我的代码: String countD = ""; for (int i = start; i <= end;
public String countDown(int start, int end, int increment)
我正在寻找一个输出,可以提供:
(10 8 6 4)
如果使用start=10
、end=3
和increment=2
调用了countDown
。它将继续递减2,直到到达终点
我知道如何构造for循环,只是不知道如何让它与字符串一起工作
以下是我的代码:
String countD = "";
for (int i = start; i <= end; i = i - increment) {
countD = countD + i;
countD = countD + " ";
}
return countD;
String countD=“”;
对于(int i=start;i问题在于您已将i
设置为10的条件i中,循环条件是i
必须小于或等于end
end
设置为3。10不小于3:)
调试这类事情的一种有用技术是在循环中插入一条print语句,这样您就可以看到您的代码实际上正在执行。像这样简单的事情例如:
for (int i = start; i <= end; i = i - increment) {
System.out.println("In the loop!");
countD = countD + i;
countD = countD + " ";
System.out.println(countD);
}
对于(int i=start;i我相信您的循环逻辑有错误。如果start大于end,您应该有i>=end
,而不是i两个问题:
StringBuilder countD = new StringBuilder();
for (int i = start; i >= end; i = i - increment)
countD.append(i).append(" ");
return countD.toString();
您需要更改i=end
String
在Java中是一个不可变的对象(构造后不能更改)
您需要改用StringBuilder
,完成后将其转换为String
因此您的代码应该如下所示:
StringBuilder countD = new StringBuilder();
for (int i = start; i >= end; i = i - increment)
countD.append(i).append(" ");
return countD.toString();
您可以添加到字符串中,如countD+=i+“”;
如果start优于end,循环的条件应该是i>=end
countD.append(i+“”);
将创建另一个StringBuilder来连接i
和“”
。为了避免使用countD.append(i).append(“”)
您是否建议i+”
返回一个StringBuilder
??我很怀疑。我的意思是i+”
被编译为使用new StringBuilder(i)。append(“”).toString()
。我们不在循环中使用StringBuilder,因为字符串是不可变的,但要避免在每个实例中创建新字符串,这将是这种连接的结果。在循环之前创建StringBuilder并将数据块附加到它可以解决此问题。编译器在编译时无法知道i
的值,所以连接必须e在运行时完成,这就是为什么它被编译为使用另一个StringBuilder的原因。你不必相信我。自己测试它。用sb.append(i+)
反编译代码以查看StringBuilder。“
(构造函数)将被放入代码中至少两次:一次用于sb
,一次用于i+”“
。要反编译类,可以使用javap-c ClassWithYourCode
。