Java 为什么我们在for循环中使用{i<;s.length()-k}请解释逻辑

Java 为什么我们在for循环中使用{i<;s.length()-k}请解释逻辑,java,string,for-loop,logic,Java,String,For Loop,Logic,这是一个解决方案的字典最小和最大的字符串,其中我们有输入Sting s和int k;k是所需最小和最大字符串的长度。请浏览这个链接,它是statementhackerrank.com/challenges/java-string-compare/problem,我不需要任何更正。我想要的是对“for loop”的解释I“cd”的第三个子串-它比“bc”大,所以我们存储“cd” i++->3,退出循环,否则我们将尝试从索引3到索引5获取一个子字符串,这将导致我2天前提到的异常 这个解释能回答你的问

这是一个解决方案的字典最小和最大的字符串,其中我们有输入Sting s和int k;k是所需最小和最大字符串的长度。请浏览这个链接,它是statementhackerrank.com/challenges/java-string-compare/problem,我不需要任何更正。我想要的是对“for loop”的解释I
String smallest = s.substring(0, k);  // Assume
String largest = s.substring(0, k);
String temp;
for(int i = 0; i < s.length() - k + 1;i++)<<<==== please Explain logic in this line
{
    temp = s.substring(i, i + k);
    if(smallest.compareTo(temp) > 0) smallest = temp;
    if(largest.compareTo(temp) < 0) largest = temp;
}
return smallest + "\n" + largest;
String最小值=s.substring(0,k);//假定
字符串最大=s.子字符串(0,k);
字符串温度;
对于(int i=0;ifor(int i=0;i
在这一行中,我们确保“i”不会超过字符串的长度,从而导致IndexOutOfBounds异常

例如,在下面的代码片段中,请注意,在For循环中,我们正在访问索引i+1,因此For循环中的条件被写为“i
for(int i = 0; i < s.length() - 1; i++){
    if(s.charAt(i+1) == s.charAt(i){
        ...
        ...
    }
}
for(int i=0;i
当for循环如下所示时,变量“i”从索引0移动到s.length()-1:

for(int i = 0; i < s.length(); i++)
for(int i = 0; i < s.length()-k; i++)
for(int i=0;i
当for循环如下所示时,变量“i”将从索引0移动到s.length()-k:

for(int i = 0; i < s.length(); i++)
for(int i = 0; i < s.length()-k; i++)
for(int i=0;i
但由于我们使用的是substring函数,并且在该函数中不包括结束索引,因此我们在for循环中添加了1:

for(int i = 0; i < s.length()-k+1; i++)
for(int i=0;i
我希望我消除了你的疑虑。不要被这冗长的解释吓倒,慢慢来理解我想表达的内容。

让我们从头开始

假设我们有字符串“abcd”,那么我们将最小和最大的从索引0切到2-它是子字符串“ab”

然后在循环中
i
从0变为3(4-2+1->3)--顺便说一下,它可以从1开始,因为我们已经处理了“ab”

i=0,在
tmp=s.substring(i,i+k)
行中,我们将第一个子字符串从“abcd”开始从索引0剪切到0+2->2-->ab

下一次迭代:i++->i=1:将第二个子串从索引1剪切到1+2->3->“bc”--它比“ab”大,所以我们存储maximust=“bc”

下一次迭代:i++->i=2;检测从索引2到2+2->4->“cd”的第三个子串-它比“bc”大,所以我们存储“cd”

i++->3,退出循环,否则我们将尝试从索引3到索引5获取一个子字符串,这将导致我2天前提到的异常


这个解释能回答你的问题吗?

注意:我不需要任何更正,所以我需要的是循环的逻辑。这个问题比这里更适合于hackerrank讨论论坛讨论这个问题。这是来自同一作者的:)为什么不在这里?很抱歉,hackerrank的“讨论”选项卡在30天的挑战中处于非活动状态。@AlexRudenko但问题是你到目前为止还没有答案。我非常感谢你的回答,但你也能帮我理解为什么我们删除了k,并且我们的条件满足了k长度的任何子字符串是的,非常感谢兄弟。对不起,上次我误解了你的答案