为什么我没有输出?

时间:2016-01-09 20:18:52

标签: java

问题是: 字符串只能包含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);
    }
}

代码正在编译而没有任何错误。我仍然需要根据问题为代码添加一些东西,但我试图检查代码是否正确到目前为止但我没有得到任何输出。欢迎任何改进代码的提示/建议。

3 个答案:

答案 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);
    }
}