【问题标题】:Java Array get digits and make number from array inputJava Array 从数组输入中获取数字并生成数字
【发布时间】:2016-02-08 02:19:18
【问题描述】:
import java.util.Scanner;
public class Tar0 {
    static Scanner in = new Scanner (System.in);
    public static void main(String[] args) {
        int d, i = 0, a = 0, f = 1;
        System.out.println("Enter How many Digits you want?");
        d = in.nextInt();
        int num[] = new int[d];
        for(i = 0; i < d; i++) {
            System.out.println("Enter Single Digit");
            num[i] = in.nextInt();
        }
        for(i = d; i > 0; i--) {
            a = a + (num[i] * f);
            f = f * 10;
        }
        System.out.println("The Number is: " + a);
    }
}

问题:用户将输入位数,程序会从中生成一个我自己编写的代码但似乎不起作用的数字。

运行程序时:

  1. 输入似乎工作正常。我试图测试输出的
  2. 没有第二个循环计算的数组,似乎工作 但随着计算似乎粉碎:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at tar0.main(tar0.java:17)

怎么了?

【问题讨论】:

  • Java 使用从 0 开始的索引。有效索引为 0..(d-1)
  • 请在发布之前尝试正确格式化您的代码(实际上,只要始终正确格式化您的代码,这将增加可读性并更容易发现错误或理解代码的作用)。另外,尽量遵循命名约定(例如:类名应以大写字母开头,变量以小写字母开头)。

标签: java arrays indexoutofboundsexception digits


【解决方案1】:

Java 数组从 0 开始并从那里继续向上。您的代码现在格式化的方式正在丢失一个值,因此您的数组太小而无法保存这些值。 如上所述的一种选择是减少您的 d 值,以便我们在循环中使用适当的数组大小。这将是首选方式,因此我删除了上面其他选项的附加代码。

import java.util.Scanner;
public class tar0 {
static Scanner in = new Scanner (System.in);
public static void main(String[] args)
{
    int d,i=0,a=0,f=1;
    System.out.println("Enter How many Digits you want?");
    d=in.nextInt();
    int num[] = new int[d];
    for(i=0;i<d;i++)
    {
        System.out.println("Enter Single Digit");
        num[i]=in.nextInt();
    }
    for(i =  d - 1; i >0 ; i--)
    {
        a=a+(num[i]*f);
        f=f*10;

    }
    System.out.println("The Number is: "+a);
 }

【讨论】:

    【解决方案2】:

    如果您修改了以下代码,它将起作用。

    for(i=d;i>0;i--)
    {
        a=a+(num[i-1]*f);
        f=f*10;
    
    }
    

    数组索引值将从 0 开始。因此将数组从 num[i] 更改为 num[i-1]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 2013-11-01
      • 1970-01-01
      相关资源
      最近更新 更多