Java For循环未正确执行

Java For循环未正确执行,java,string,for-loop,substring,Java,String,For Loop,Substring,给您一个字符串S,由N个拉丁字母“a”和“b”组成。您还可以处理M个查询。查询如下: CLRCH:字符串中的所有符号,从lth开始,结束 在rth等于ch时 S l1 r1 l2 r2:交换两个连续的 字符串的片段,其中第一个由子字符串表示 从l1开始到r1结束,第二个由a表示 从l2开始到r2结束的子串 R:反转 从第lth个符号开始,到第rth个符号结束的字符串 W l r:输出从lth开始的字符串的子字符串 符号,并在第一个结束 H l1 l2 len:输出汉明 从l1和l1开始的连续子

给您一个字符串S,由N个拉丁字母“a”和“b”组成。您还可以处理M个查询。查询如下:

  • CLRCH:字符串中的所有符号,从lth开始,结束 在rth等于ch时
  • S l1 r1 l2 r2:交换两个连续的 字符串的片段,其中第一个由子字符串表示 从l1开始到r1结束,第二个由a表示 从l2开始到r2结束的子串
  • R:反转 从第lth个符号开始,到第rth个符号结束的字符串
  • W l r:输出从lth开始的字符串的子字符串 符号,并在第一个结束
  • H l1 l2 len:输出汉明 从l1和l1开始的连续子字符串之间的距离 分别为l2,长度为len
这里的一切都是1-索引的

import java.util.*;

public class MyCode {
static  Scanner sc=new Scanner(System.in);   
public static void main(String[] args) {

    int N=sc.nextInt();
    //sc.nextLine(); 
    String s = sc.next();
    s = s.substring(0, N);
    System.out.println(s); 
//  char[] st=s.toCharArray();
    int M=sc.nextInt();
    for(int i=0;i<M;i++){
        String q=sc.next();

        if(q=="W"){
            System.out.println(queryW(s));
        }else if(q=="R"){
            queryR(s);
        }else if(q=="C"){
            queryC(s);
        }else if(q=="H"){
            System.out.println(queryH(s));
        }else if(q=="S"){
            System.out.println(queryS(s));
        }
    }
}

public static String queryW(String s){
   int l=sc.nextInt();
   int r=sc.nextInt();
   return s.substring(l,r);
}

public static void queryR(String s){
    int l=sc.nextInt();
    int r=sc.nextInt();
    s.substring(l,r);                   
    char[] st=s.toCharArray();
for (int i=s.length()-1;i>=0;i--)   //REVERSE THE SUBSTRING
    System.out.print(st[i]);
    }

 public static void queryC(String s){
    int l=sc.nextInt();
    int r=sc.nextInt();
    char ch=sc.next().charAt(0);

    String st=s.substring(l,r);
    char[] n =st.toCharArray();

    for(int i=0;i<n.length;i++){
    n[i]=ch;
    System.out.println(n[i]);                       
    }
 }

 public static int queryH(String s){
    int l1=sc.nextInt();
    int l2=sc.nextInt();
    int len=sc.nextInt();
    String st1=s.substring(l1,len);
    String st2=s.substring(l2,len);

    char[] s1 = st1.toCharArray();
    char[] s2 = st2.toCharArray();

   int shorter = Math.min(s1.length, s2.length);
   int longest = Math.max(s1.length, s2.length);

   int result = 0;
     for (int i=0; i<shorter; i++) {
        if (s1[i] != s2[i]) 
        result++;
       }

      result += longest - shorter;

      return result;
  }

  public static String queryS(String s){
    int l1=sc.nextInt();
    int r1=sc.nextInt();
    int l2=sc.nextInt();
    int r2=sc.nextInt();
    String st1=s.substring(l1,r1);
    String st2=s.substring(l2,r2);
    String temp="";
    while(st1!=st2){
    temp=st1;
    st1=st2;
    st2=temp;
}
return st1.concat(st2); 
}
}

但是for循环并没有像预期的那样工作。它只接受前10个值作为输入,而我希望读取整个值。我在某个地方出错了,所以需要帮助。

您的for循环从I=0转到I,您能在代码中设置断点吗?它使调试变得更容易!这需要更多的澄清。你到底想干什么?您的产出与预期产出有何差异?您使用什么作为输入?您是否使用调试器单步执行代码?您是否将字符串与“==”进行比较?我也尝试了string.equals,然后也得到了错误的答案:'(
10
aabbbabbab
10
R 1 5
W 3 8
C 4 4 a
H 2 1 9
S 5 9 10 10
H 1 2 9
C 3 3 b
H 7 8 2
C 2 9 a
S 7 9 10 10