For循环无法正确执行

时间:2016-01-19 19:19:34

标签: java string for-loop substring

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

  • C l r ch:字符串中的所有符号,从第1个开始,结束 在rth变得等于ch;
  • S l1 r1 l2 r2:连续两次交换 字符串的片段,其中第一个由子字符串表示 从l1开始,以r1结束,第二个用a表示 子串从l2开始,结束于r2;
  • R l r:反转片段 从第l个符号开始并在第1个符号结束的字符串;
  • W l r:输出从第l个字符开始的字符串的子字符串 符号并在第一个结束;
  • H l1 l2 len:输出汉明 从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); 
}
}

这是我的代码。我想把输入作为:

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

但for循环不能按预期工作。它只接受前10个值作为输入,而我希望读取整个值。我在某个地方犯了一个错误,所以需要帮助。

0 个答案:

没有答案