【问题标题】:Getting java.lang.ArrayIndexOutOfBoundsException, looked, cannot find an example thats the same获取 java.lang.ArrayIndexOutOfBoundsException,查看,找不到相同的示例
【发布时间】:2015-10-20 04:51:21
【问题描述】:

我正在为我的 AP 计算机科学课程编写“推文检查器”代码。该代码应该检查推文的长度是否在 140 个字符的限制内,如果是,则打印主题标签、@ 和使用的链接的数量。我正在使用 .split 方法将所有字符放入一个数组中,然后我使用 for 循环访问该数组以查找特定字符。

我一直遇到 java.lang.ArrayIndexOutOfBoundsException,我知道这意味着我正在尝试访问我的字符串中不存在的元素,例如元素 46 用于 46 个字符的数组,但我不知道确切的问题是什么在这儿。我上次因为“看起来不够努力”而被竖起大拇指,但我只在这个主题上搜索了 2 个多小时,而我只是一名高中生。

感谢所有帮助。

import java.util.Scanner;
import java.lang.Math; 

class Main{
    public static void main(String[] args)
     {
      Scanner scan = new Scanner (System.in);
      System.out.println("Please enter a tweet:");
      String tweet = scan.nextLine();
      int length = tweet.length ();
      String[] tweetArray = tweet.split ("");
      int c = 0;
      int d = 0;
      int e = 0;
      int i = 0;
      if (length > 140)
        System.out.println("Excess Characters: " + (length - 140));
      else
      {
        System.out.println("Length Correct");
        for (i = 0; i < length; i++)
        {
          if (tweetArray[i].equals("#"))
          {
            if(!tweetArray[i+1].equals(" "))
            {
              c++;
            }
          }
        }
        System.out.println("Number of Hastags: " + c);
        for (i = 0; i < length; i++)
        {
          if (tweetArray[i].equals("@"))
          {
            if(!tweetArray[i+1].equals(" "))
            {
              d++;
            }
          }
        }
          System.out.println("Number of Attributions: " + d);
          for (i = 0; i < length; i++)
          {
            if((tweetArray[i].equals("h")) || (tweetArray[i].equals("H")))
            {
              if(tweetArray[i+1].equals("t") || tweetArray[i+1].equals("T"))
              {
                if(tweetArray[i+2].equals("t") || tweetArray[i+2].equals("T"))
                {
                  if(tweetArray[i+3].equals("p") || tweetArray[i+3].equals("P"))
                  {
                    if(tweetArray[i+4].equals(":"))
                    {
                      if(tweetArray[i+5].equals("/"))
                      {
                        if(tweetArray[i+6].equals("/"))
                        {
                          if(!tweetArray[i+7].equals(" "))
                          {
                            e++;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        System.out.println("Number of Links: " + e);
      }




}
}

【问题讨论】:

  • 调试这类事情的最佳方法是使用调试器。如果您不使用它,请立即停止您正在做的事情并安装一个,以便您可以使用它。它将显着提高您对编写代码的理解,显着提高您的学习速度。市面上有多种质量合理的免费 Java IDE(Netbeans、IntelliJ IDEA Community Edition、Eclipse),都带有内置调试器。

标签: java arrays for-loop indexoutofboundsexception


【解决方案1】:

在您的 for 循环中,i 正确地从 0 迭代到最大长度。但是您有如下代码:

 tweetArray[i+1]
 ...
 tweetArray[i+7]

一旦i 达到(或接近)其最大值,它将失败。也就是说,您正在引用数组的末尾。

一般来说,如果你需要检查下一个字符,你需要先检查它是否存在(因为你只知道当前字符存在)。

不过,您可能希望回顾一下您的整个方法。似乎不需要将您的字符串拆分为字符。您可以改为使用基于字符串的函数来计算@ 字符的数量或检查字符串是否存在(例如http://)。查看the API

【讨论】:

  • 好的,我该如何解决?
  • @SeanTheSaxMan 有人会认为不给数组一个超出范围的索引会解决它。
  • 好的,我明白为什么我的代码会失败,现在我的问题是,我如何检查下一个字符不是空格,而不给代码失败的方法?
猜你喜欢
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多