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 桁です。数値がこれよりも大きい場合は負になり、結果ArrayIndexOutOfBoundsExceptionとしてtal%10負になります。

この問題を回避するには、 (最大値が の) のlong代わりにa を使用するか、BigDecimal を任意の大きな数値に使用するか、数値を文字列として操作する (つまり、まったく解析しない) ことができます。int~9.2 * 10^18

于 2013-10-13T17:24:24.257 に答える