尝试访问String Array

时间:2015-11-26 04:15:08

标签: java arrays string int

我正在尝试编写一个程序,在输入数字时输出数字的名称。它适用于一位数字,但我遇到了障碍。每当我输入一个大于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以使数字在字符串数组中与其名称相同,但它仍然不起作用。我究竟做错了什么?谢谢!

6 个答案:

答案 0 :(得分:1)

两个问题,都与您是整数部门的受害者有关:

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

现在出现问题:

  1. 第一个if语句将导致任何小于20的数字评估为true(因为19/10 == 1)。
  2. 解决这个问题: 将其更改为if (x <= 10)

    1. 第二个if语句将永远为真,因为x / 10不能小于2且大于1(因为它是一个整数!)
    2. 要解决此问题,请将其更改为:

      • if(x < 20)
      • 或,if(x / 10 == 1)

答案 1 :(得分:0)

您的代码正在检查是否(x / 10 <= 1),那么10s将为真,并在这种情况下放入代码中。即11/10 == 1

答案 2 :(得分:0)

我想这里有两个问题:

你为什么要尝试使用多个阵列,你可以选择这两个阵列。其次,为什么使用x / 10,你可以简单地比较x&lt; 10或x&gt; 10&amp;&amp; X - 小于20。

答案 3 :(得分:0)

我对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);
   }
}

答案 4 :(得分:0)

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

ones(x)

将导致ArrayIndexOutOfBounds

答案 5 :(得分:0)

这是因为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);