Java While循环不退出
当我试图编写一个简单的java代码,用循环替换给定字符串中的一个特定字符时,我很困惑地发现了错误。详情如下:Java While循环不退出,java,replace,while-loop,Java,Replace,While Loop,当我试图编写一个简单的java代码,用循环替换给定字符串中的一个特定字符时,我很困惑地发现了错误。详情如下: INPUT String : "123qq11 1q1 11q1 1qq11 1q1 11q1" REQUIRED OUTPUT: "123QQ11 1Q1 11Q1 1QQ11 1Q1 11Q1" GOT OUTPUT: "Q23QQ11 1Q1 11Q1 1QQ11 1Q1 11Q1" as infinite loop 算法:将给定字符串中的“q”替换为“q” 我要更正
INPUT String : "123qq11 1q1 11q1 1qq11 1q1 11q1"
REQUIRED OUTPUT: "123QQ11 1Q1 11Q1 1QQ11 1Q1 11Q1"
GOT OUTPUT: "Q23QQ11 1Q1 11Q1 1QQ11 1Q1 11Q1" as infinite loop
算法:将给定字符串中的“q”替换为“q”
我要更正的代码是:
public class Rani {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("123qq11 1q1 11q1 1qq11 1q1 11q1");
int j = 0;
int i = 0;
while (i < sb.length()) {
while (i + 1 < sb.length()) { // while 2nd
i++;
if (sb.charAt(i) == 'q') {
j = i;
break;
} else {
break;
}
}
sb.replace(j, j + 1, "Q");
System.out.println(sb);
}
}
}
作为java和编程的新手,我一直无法管理更正。首先,您不需要2个while循环
int i = 0;
while(i < sb.length())
{
if(sb.charAt(i) == 'q')
sb.setCharAt(i, 'Q');
i++;
}
第二,我永远停留在sb.length-1,使它成为一个无限循环
您可以使用replace或replaceAll
如果你想使用while循环
int i = 0;
while(i < sb.length())
{
if(sb.charAt(i) == 'q')
sb.setCharAt(i, 'Q');
i++;
}
如果你不想使用替换,你可以这样做
for (int i = 0; i < st.length(); i++)
if (st.charAt(i) == 'q')
st.setCharAt(i, 'Q');
这是工作代码
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("123qq11 1q1 11q1 1qq11 1q1 11q1");
int j = 0;
int i = 0;
while (i < sb.length()) {
while (i < sb.length()) { // while 2nd
if (sb.charAt(i) == 'q') {
j = i;
break;
}
i++;
}
sb.replace(j, j + 1, "Q");
System.out.println(sb);
}
}
输出:123QQ11 1Q1 11Q1 1QQ11 1Q1 11Q1在您的代码中,您告诉我增量过快。在内部循环中,我只得到30,而长度实际上是31。如果你把i++移动到第一个循环的末尾,但是我们这一方的内部循环应该按照你想要的方式工作。像这样:
public static void main (String[] args) {
StringBuilder sb = new StringBuilder("123qq11 1q1 11q1 1qq11 1q1 11q1");
String strnew = "";
for(int i=0;i<sb.length();i++)
{
if(sb.charAt(i)=='q')
{
strnew=strnew+"Q";
}
else
strnew=strnew+sb.charAt(i);
}
System.out.println(strnew);
}
...
if (sb.charAt(i) == 'q') {
j = i;
break;
}
i++;
}
...
唯一的问题是您总是替换字符串的第一个字符。第一个数字1将替换为Q。因为使用j替换Q,所以它始终是第0个插槽中的字符
您甚至可以使用一个循环来简化购买:
while (i<sb.length()){
if (sb.charAt(i) == 'q'){
sb.replace(i, i + 1, "Q");
}
i++;
}
System.out.println(sb);
或者您可以使用for循环:
for (i =0; i<sb.length();i++){
if (sb.charAt(i)=='q'){
sb.replace(i, i+1, "Q");
}
}
System.out.println(sb);
为什么这里有2个循环?你只需要1个…除了这个问题,简单执行的问题是什么?问题是当i=sb.length-1时,你的第二个循环从未进入,所以i++永远不会发生,我永远停留在sb.length-1…这就是使用调试器的地方,但我认为代码太复杂了。只要用一个环就行了。你的纠正对我大有裨益。只有敏锐的头脑才能为一个人的问题提供如此切中要害的解决方案。我知道别人建议的一切,但我渴望发现自己的肌肉薄弱。所以你的回答真的很有价值,很有教育意义。我很高兴地发现,在StackOver的网站上,有一些像你这样的智囊团成员,他们可以帮助你拓展自己的创新能力和想象力。