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