Java For循环未正确执行
给您一个字符串S,由N个拉丁字母“a”和“b”组成。您还可以处理M个查询。查询如下: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开始的连续子
- 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
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