Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的事情发生在for循环中,java_Java - Fatal编程技术网

奇怪的事情发生在for循环中,java

奇怪的事情发生在for循环中,java,java,Java,我对编程相当陌生,我开始编写一些基本代码。我试图创建一个算法,在字符串中找到您想要的字符的每个位置。如果我输入“helllo”作为字符串,并希望搜索字符l,它将输出2、3和4。代码运行良好,直到我试图欺骗代码一点来更改某些内容。为此,我首先删除了“for循环”中的终止条件,而是在循环期间添加了一个if语句来中断它。我花了大约2个小时在之后发生的错误上,但我仍然无法发现发生了什么 这是它给我的代码和输出。(我知道我的代码乱七八糟,没有进行适当的优化,但现在我只想知道发生了什么。如果我能让它工作起来

我对编程相当陌生,我开始编写一些基本代码。我试图创建一个算法,在字符串中找到您想要的字符的每个位置。如果我输入“helllo”作为字符串,并希望搜索字符l,它将输出2、3和4。代码运行良好,直到我试图欺骗代码一点来更改某些内容。为此,我首先删除了“for循环”中的终止条件,而是在循环期间添加了一个if语句来中断它。我花了大约2个小时在之后发生的错误上,但我仍然无法发现发生了什么

这是它给我的代码和输出。(我知道我的代码乱七八糟,没有进行适当的优化,但现在我只想知道发生了什么。如果我能让它工作起来,我会重新安排它。谢谢你^-^。)

当我运行代码时,它不会按应有的方式显示“7、8、9、10”(它在字符串Oioriew^^^^^中搜索字符^),而是输出“7-1、8、9、10”。为了修复它,我可以简单地在循环中再次插入终止条件,即“pow!=-1”,但在这一点上,我真的想知道它为什么会发生

public class Tests {
static void zeMethod(String mainString,char charToFind) { 
        int  a = 0;
        String b, c;
        char chartToConvert;
        c = ""; 
        b = "";
        for (int pow = mainString.indexOf(charToFind);
        ; // *the condition was here.*
        pow = mainString.indexOf(charToFind, pow + 1)) {
        a++;
        if (a == 1){
            System.out.println("String: "+mainString);
            System.out.println("il y a un "+charToFind+" à la/aux position(s)");
        }
        if (a == 1){
            System.out.print(pow);
        }

        if (a%2 == 0 && pow != -1) {                
            c = b+", "+pow;
        }
        if (a%2 != 0 && a != 1 && pow != -1) {
            b = c+", "+pow;
        }           
        if (pow == -1){
            System.out.print(pow);
            break;
        }   
        //*end of loop*     
        }

        if (a%2 != 0){
            System.out.println(c);
        }
        else {
            System.out.println(b);
        }
}       
public static void main(String[] args){
    String string = "Oioriew^^^^";
    char chara = '^';
    zeMethod(string, chara);

}
}

如果我的问题有点不连贯或问得不恰当,我很抱歉。这是我第一次上这个网站,英语不是我的母语。谢谢你抽出时间

编辑:

我知道这个问题一开始并不清楚,但我的意思是,为什么pow在循环的第二次迭代后变成-1。还有,为什么在System.out.print(pow)之后会出现中断;不会让它离开循环。(我也在研究如何使调试器工作。)

[…]它没有按应有的方式显示,“7,8,9,10”[…]它输出“7-1,8,9,10[…]我真的想知道它为什么会发生

听起来你在问为什么它会打印
-1
,这是因为你明确要求它:

if (pow == -1){
    System.out.print(pow);
    break;
}
如果
pow
-1
,则打印
pow
(也称
-1
)并退出循环


更新

至于为什么要更改输出的顺序,请使用调试器并一次一个语句地逐步执行代码,您将看到

但是,让我们看看:我们可以同意循环将以以下顺序使用
pow
进行迭代:
7
8
9
10
-1

为什么要先打印
7
因为循环中包含以下代码:

a++;
if (a == 1){
    System.out.print(pow);
}
为什么下一步打印
-1
因为循环中没有其他打印语句,如果正确缩进代码,也就是缩进循环的内容,这将更加明显

为什么最后打印
8,9,10
因为您在循环之后打印
b
c
的内容,而这是其中任何一个正在打印的内容


请注意第一个值(
-7
)没有添加到
b
,因为您在
if
语句中明确排除了它。

我很好,感谢大家的时间和Andreas的调试器选项。这是任何编程人员都必须具备的。我不知道我之前怎么看不到这一点,但要打破它,它必须变成-1,因为我必须先打破它才能继续编程nt我的答案是,-1是第一个。

这不是一个“限制”,它是(
用于(初始化;终止;增量){statement}
你是正确的,我会更正它。看起来不错,我会研究它,谢谢。将
if
break
移动到
循环体的
中的第一个语句(不是最后一个)。顺序很重要。在循环的第二次迭代之前,“增量”发生。然后测试终止。然后执行语句。您当前在语句之后有终止。您希望(初始化;;增量){termination;语句;}
而不是(初始化;;增量){statement(s) ;termination;}
我的错误,我的意思是,为什么代码会将pow更改为7,然后更改为-1,然后更改为8。我知道-1表示找不到字符,但我不知道它为什么会这样做。即使我在打印pow后显式要求从循环中断,它仍然会继续更改为10,然后退出循环。