输入中超过10位数时的向量错误

时间:2013-10-12 22:57:29

标签: vector boolean

你用一个随机数写,代码应该算出你输入了多少个唯一数字。例5545会给出2作为答案。这最多可达10位数,如果我输入更多数字,我会收到错误信息。为什么?

import java.util.Random;

import se.lth.cs.window.SimpleWindow;
import se.lth.cs.p.ovn.turtle.Turtle;

import java.util.Scanner;
public class p5 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
    int apa=0;
    System.out.println("ange tal");
    int tal = scan.nextInt();
    boolean hej [] = new boolean[10];
    if(tal==0){
        hej[0]=true;
        System.out.println("awejawejwaejae");

    }
    while(tal>0){
    int z = tal%10;
    hej[z]=true;
    tal=tal/10;
    }



    for(int k=0; k<10; k++)
    if(hej[k]==true){
    apa++;
    }
    System.out.println(apa);
    for(int k=0; k<10; k++){
        System.out.println(hej[k]);
    }


    }

    }

1 个答案:

答案 0 :(得分:0)

Java int类型是一个32位有符号整数,即它保存从-2^312^31 - 1的值。 最大值2^31 - 1~2.14 * 10^10,即有10位数。如果您的号码大于此值,则会变为负数,这将导致ArrayIndexOutOfBoundsException tal%10为负值。

您可以使用long代替int(最大值为~9.2 * 10^18),或将BigDecimal用于任意大数字,或者将数字作为字符串操作(即根本不解析它)来规避这个问题。