【问题标题】:ArrayOutOfBoundsException when trying to access String Array尝试访问字符串数组时出现 ArrayOutOfBoundsException
【发布时间】:2015-11-26 04:15:08
【问题描述】:

我正在尝试编写一个在您输入数字时输出数字名称的程序。它适用于一位数字,但我遇到了障碍。每当我输入一个大于 10 的数字时,它都会给我一个 ArrayOutOfBoundsException。我不太清楚为什么,因为我使用数组的时间不长。到目前为止,我只编写了代码来输出最多 20 个数字的名称。代码如下:

package numericname;

import java.util.Scanner;

public class NumericName {

static String[] Ones = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten"};
static String[] Mids = {"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int x;
    System.out.println("Enter a number");
        x = in.nextInt();
    if(x/10 <= 1)
        ones(x);
    if(x/10 > 1 && x/10 < 2)
        mids(x);
}

public static void ones(int x) {
    System.out.println(Ones[x]);
}

public static void mids(int x) {
    x -= 11
    System.out.println(Mids[x]);
    }
}

我添加了 x - 11 以使数字等于它在字符串数组中的名称,但它仍然不起作用。我究竟做错了什么?谢谢!

【问题讨论】:

  • 如果 x = 11 ,它将进入第一个 if 并且 one(x) 将被执行。
  • 哦对了,因为这些变量是整数!!哦,非常感谢!

标签: java arrays string int


【解决方案1】:

两个问题,都与您成为整数除法的受害者有关:

在 Java 中,当您将两个整数相除时,结果是被截断小数 的等式的值。这意味着小数部分是“截止”。例如:11 / 10 = 119 / 10 = 19 / 10 = 0

现在解决问题:

  1. 第一个 if 语句将导致任何小于 20 的数字计算为真(因为 19 / 10 == 1)。

要解决这个问题: 改成if (x &lt;= 10)

  1. 第二个 if 语句永远不会为真,因为 x/10 不能小于 2 且大于 1(因为它是整数!)

要解决此问题,请将其更改为:

  • if(x &lt; 20)
  • if(x / 10 == 1)

【讨论】:

  • 谢谢!我尽量记住这一点,但这次它完全溜走了!
【解决方案2】:

我想这里有两个问题:

您为什么要尝试使用多个数组,您可以将两者结合起来。其次,为什么使用x/10,你可以简单地比较x10 && x

【讨论】:

  • 你知道,我真的从没想过。我一直在努力让自己的事情变得更难。谢谢!
【解决方案3】:

您的代码正在检查是否 (x/10

【讨论】:

  • 啊,我明白了,因为它是一个 int.. 谢谢!
【解决方案4】:

我对 main() 的建议编辑如下:

public static void main(String[] args) {
   Scanner in = new Scanner(System.in);
   int x;
   System.out.println("Enter a number");
   x = in.nextInt();
   if(x <= 10) {
      ones(x);
   } else if(x < 20) {
      mids(x);
   }
}

【讨论】:

    【解决方案5】:

    问题在于您尝试的除法是整数除法,这不会像您预期的那样工作。从 11 到 19 的任何数字都会产生 x/10 作为 1,然后是函数

    ones(x)
    

    会导致一个ArrayIndexOutOfBounds

    【讨论】:

      【解决方案6】:

      这是因为,x/10 仍然给你1。这是一个整数除法。您必须将其更改为浮点数。

      只需将x/10x/20 更改为x/10.0x/20.0。 或者在除法期间将x 转换为float

      示例

      if((float)x/10 <= 1)
          ones(x);
      if((float)x/10 > 1 && (float)x/10 < 2)
          mids(x);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-19
        相关资源
        最近更新 更多