问题是: 字符串只能包含a,b或c。不能有2个连续的相同字符。第一个和最后一个字符不能相同。现在给出一个带'a','b','c'或'?'的字符串。我们需要找到满足上述条件的字符串替换'?'。对于多个答案显示按字典顺序排列最小的字符串。如果没有回答,可能会显示“不可能”。
import java.util.*;
class Replace {
public static void main(String args[]) {
char[] arr = { 'a', 'b', 'c' };
char Pre, Suc;
Scanner in = new Scanner(System.in);
String str = new String();
String str2 = new String();
System.out.println("Enter the String");
while (in.hasNextLine()) {
str = in.nextLine();
}
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '?') {
Pre = str.charAt(i - 1);
Suc = str.charAt(i + 1);
for (int j = 0; j < 3; i++) {
while (arr[j] != Pre && arr[j] != Suc) {
str2 = str.substring(0, i) + arr[j]
+ str.substring(i + 1, (str.length() - 1));
}
}
}
}
System.out.println(str2);
}
}
代码正在编译而没有任何错误。我仍然需要根据问题为代码添加一些东西,但我试图检查代码是否正确到目前为止但我没有得到任何输出。欢迎任何改进代码的提示/建议。
答案 0 :(得分:2)
Pre = str.charAt(i-1);
和Suc = str.charAt(i+1);
在&#34;?&#34;是第一个/最后一个字母。然后会导致java.lang.StringIndexOutOfBoundsException
while
- 循环,因此永远不会达到System.out.println(str2);
。答案 1 :(得分:1)
问题是程序卡在while(in.hasNextLine()) { str = in.nextLine(); }
循环中。没有退出条件。 hasNextLine
将阻止,直到输入新行。根据Javadoc:
此方法可能会在等待输入时阻止。
答案 2 :(得分:0)
你需要一个条件来打破第一个while循环。当用户插入输入字符串时,按下enter键,因此Scanner将第二个输入作为空字符串。您可以检查空字符串并退出while循环。
import java.util.*;
class Replace
{
public static void main(String[] args)
{
char[] arr = {'a','b','c'};
char Pre,Suc;
Scanner in = new Scanner(System.in);
String str = new String();
String str2 = new String();
System.out.println("Enter the String");
while(in.hasNextLine())
{
if(str.isEmpty()) break;
str = in.nextLine();
}
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)=='?')
{
Pre = str.charAt(i-1);
Suc = str.charAt(i+1);
for(int j=0;j<3;i++)
{
while(arr[j]!=Pre && arr[j]!=Suc)
{
str2 = str.substring(0,i)+arr[j]+str.substring(i+1,(str.length()-1));
}
}
}
}
System.out.println(str2);
}
}