1

您输入一个随机数,代码应该计算出您输入了多少个唯一数字。示例 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]);
    }


    }

    }
4

1 回答 1

0

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

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

于 2013-10-13T17:24:24.257 回答