编程新手,遇到运行时错误不知道为什么

时间:2019-05-09 01:10:06

标签: java runtime-error

标题中的基本摘要。 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);
  }
}

2 个答案:

答案 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!

我将它留给您,以弄清楚如何解决。