标题中的基本摘要。 https://ideone.com/E2BMS8 <-这是代码的链接。我了解您是否不想单击它,因此也将其粘贴到此处。只会杂乱无章。该代码应该翻转字母但将单词保持在相同位置。我想自己解决这个问题。只需要帮助解决运行时错误。
import java.util.*;
class Ideone {
public static void main (String[] args) throws java.lang.Exception {
Scanner input = new Scanner(System.in);
String sent, accum = "";
char check, get;
int len, count = 0;
System.out.print("Please enter the sentance you want reversed: ");
sent = input.nextLine();
len = sent.length();
for (int i = 0; i < len; i++) {
check = sent.charAt(len - i);
count += 1;
if (check == ' ') {
for (int p = 0; p < count; p++) {
while (p < count) {
get = sent.charAt(len - p);
accum += (get + ' ');
}
}
}
}
System.out.println("Reversed: " + accum);
}
}
答案 0 :(得分:2)
由于len比索引范围大1,因此导致错误String index out of range
。像我在下面这样删除索引上的一个:
import java.util.*;
public class Ideone {
public static void main (String[] args) throws java.lang.Exception {
Scanner input = new Scanner(System.in);
String sent, accum = "";
char check, get;
int len, count = 0;
System.out.print("Please enter the sentance you want reversed: ");
sent = input.nextLine();
len = sent.length();
for (int i = 0; i < len; i++) {
check = sent.charAt(len - i - 1);
count += 1;
if (check == ' ') {
for (int p = 0; p < count; p++) {
get = sent.charAt(len - p - 1);
accum += (get + ' ');
}
}
}
System.out.println("Reversed: " + accum);
}
}
答案 1 :(得分:0)
这是一个经典的“一举成名”错误-找到编程脚后,您将碰到很多。在这种情况下,问题是基于0的索引。也就是说,字符串的第一个字符在索引0处,最后一个字符在索引“ 字符串长度-1 ”处。如果我们以sent = "Test";
为例,则:
sent.charAt(0) == 'T'
sent.charAt(1) == 'e'
sent.charAt(2) == 's'
sent.charAt(3) == 't'
sent.charAt(4) == ??? // "That's an error, Jim!"
请注意,索引4(可能还会混淆字符串的长度 )超出了范围。因此,在循环的第一次迭代中,当i == 0
时发生了什么:
check = sent.charAt(len - i); // ERROR! Because ...
==> = sent.charAt((4) - (0));
==> = sent.charAt( 4 ); // Doh!
我将它留给您,以弄清楚如何解决。