Java 为什么我得不到输出?

Java 为什么我得不到输出?,java,Java,问题是: 字符串只能包含A、b或c。不能有两个连续的相同字符。第一个和最后一个字符不能相同。现在给定一个带有“a”、“b”、“c”或“?”的字符串。我们需要找到满足上述条件的替换“?”的字符串。对于多答案,按字典顺序显示最小字符串。对于无应答可能显示“不可能” import java.util.*; class Replace { public static void main(String args[]) { char[] arr = { 'a', 'b', 'c'

问题是: 字符串只能包含A、b或c。不能有两个连续的相同字符。第一个和最后一个字符不能相同。现在给定一个带有“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);
    }
}
import java.util.*;
类替换{
公共静态void main(字符串参数[]){
char[]arr={'a','b','c'};
char-Pre,Suc;
扫描仪输入=新扫描仪(系统输入);
String str=新字符串();
String str2=新字符串();
System.out.println(“输入字符串”);
while(在.hasNextLine()中){
str=in.nextLine();
}
对于(int i=0;i

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

问题是程序在(in.hasNextLine()){str=in.nextLine();}
循环时卡在了
中。没有退出条件
hasNextLine
将被阻止,直到输入新行。根据Javadoc:

此方法在等待输入时可能会阻塞


问题是程序在(in.hasNextLine()){str=in.nextLine();}
循环时卡在
中。没有退出条件
hasNextLine
将被阻止,直到输入新行。根据Javadoc:

此方法在等待输入时可能会阻塞

  • 代码
    Pre=str.charAt(i-1)
    Suc=str.charAt(i+1)有问题。它将导致
    java.lang.StringIndexOutOfBoundsException
  • 目前,您没有离开用于读取输入的
    循环,因此
    系统.out.println(str2)从未到达
      • 代码
        Pre=str.charAt(i-1)
        Suc=str.charAt(i+1)有问题。它将导致
        java.lang.StringIndexOutOfBoundsException
      • 目前,您没有离开用于读取输入的
        循环,因此
        系统.out.println(str2)从未到达

        • 您需要一个条件来中断第一个while循环。当用户插入输入字符串时,他按enter键,因此扫描仪将第二个输入作为空字符串。您可以检查空字符串并退出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);
              }
          }
          
          import java.util.*;
          类替换
          {
          公共静态void main(字符串[]args)
          {
          char[]arr={'a','b','c'};
          char-Pre,Suc;
          扫描仪输入=新扫描仪(系统输入);
          String str=新字符串();
          String str2=新字符串();
          System.out.println(“输入字符串”);
          while(在.hasNextLine()中)
          {
          如果(str.isEmpty())中断;
          str=in.nextLine();
          }
          
          对于(int i=0;i您需要一个条件来中断第一个while循环。当用户插入输入字符串时,他按enter键,以便扫描仪将第二个输入作为空字符串。您可以检查空字符串并退出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);
              }
          }
          
          import java.util.*;
          类替换
          {
          公共静态void main(字符串[]args)
          {
          char[]arr={'a','b','c'};
          char-Pre,Suc;
          扫描仪输入=新扫描仪(系统输入);
          String str=新字符串();
          String str2=新字符串();
          System.out.println(“输入字符串”);
          while(在.hasNextLine()中)
          {
          如果(str.isEmpty())中断;
          str=in.nextLine();
          }
          
          对于(int i=0;第一个技巧是使用IDE的格式菜单选项。你的程序完全没有缩进,几乎不可读。再加上像
          str
          str2
          这样没有意义的变量名,你真的很难帮到你。第一个技巧是使用IDE的格式菜单选项。你的程序它完全没有缩进,几乎不可读。再加上像
          str
          str2
          这样毫无意义的变量名,你真的很难得到帮助。另外,
          for(int j=0;jAnd,内部
          while
          循环也将永远循环,因为
          中没有一个值(arr[j]!=Pre&&arr[j]!=Suc)
          在主体中更改。因此,代码有3个嵌套循环,所有循环都将永远循环。哎呀!另外,
          for(int j=0;jAnd,内部
          ,而
          循环也将永远循环,因为
          (arr[j]!=Pre&&arr[j]!=Suc)中的任何值都不会在主体中更改。因此,代码有3个嵌套循环,所有循环都将永远循环。哎呀!