这是我编写的一个Java程序,输入一个字符串判断里面有几个A,如图,我的这个程序如果A在最后那么就检测不到位于最后的A,如果A不在最后就可以被检测出来,如图。 AAA输出就是2 AASA输出也是2 AAAS输出也是2 但是AAASSS这种输出就是3。
后面我把.length()后面加了1变成.length()+1就正常了AAA就是3 或者把for循环换成下面我注释掉的while循环也是对的
正确的如下
我想知道这是为什么,很疑惑,自己手算手动运行程序.length不加1感觉也可以,但是运行出来就是不对。
package week6;
import java.util.Scanner;
public class Test_2_2 {
public static void main(String[] args) {
Scanner character = new Scanner(System.in);
String str = character.nextLine();
int sum = 0;
int len = str.length();
for (int i = 0; i < len; i++) {
if (str.indexOf("A") != -1) {
sum++;
str = str.substring(str.indexOf("A") + 1);
System.out.println(str);
System.out.println("i=" + i);
}
}
System.out.println(sum);
}
}
你的循环终止条件在循环体内部不断变化了
要把循环终止条件,在循环开始时固化下来
int len = str.length();
for (int i = 0; i < len; i++) {
你对str变量重新赋值了,str.length()的值也会变化。你把for循环去掉,if改成while应该就差不多了。