0

入力はString "543210". このコードは、メソッドを使用して各文字を抽出charAtし、数値の値に対応する特定の配列位置に順番に配置します。 charAt(0) = 5は、5 が に入る必要があることを意味しarrayLocation 5ます。うまくいかないようです。私も試してみましたarrayLists

public class HugeInteger {

    private String digits;

    int[] arrayToStoreTheDigits = new int[6];

    public HugeInteger(String digits) {

        this.digits = digits;
        add();


    }

    public void add() {

        for (int i = 0; i < 5; i++) {
            arrayToStoreTheDigits[digits.charAt(i)] = digits.charAt(i);
            System.out.println(digits.charAt(i));
        }

    }

    public String toString() {

        return "" + arrayToStoreTheDigits + "/ " + digits.charAt(2);
    }

}

package Exercise8_17_HugeIntegers;

public class HugeIntegertester {
    // static HugeInteger huge;

    public static void main(String[] args) {

        HugeInteger huge = new HugeInteger("543210");

    System.out.println(huge.toString());

    }




}
4

2 に答える 2

4

あなたの質問は不明確ですが、問題はここにあると思います:

arrayToStoreTheDigits[digits.charAt(i)] = digits.charAt(i);

文字の UTF-16 コード単位であるため、整数値が53digits.charAt(i)の場合。数字として見たときにその値を抽出しようとしている場合は、 を使用する必要があります。または、本当に 0 ~ 9 だけを気にし、他の文字がないと確信している場合は、減算することもできます。'5''5'Character.digit'0'

したがって、次のようにコードを書くことができます。

char c = digits.charAt(i);
arrayToStoreTheDigits[c - '0'] = c;

この初期化により、次の点に注意してください。

int[] arrayToStoreTheDigits = new int[6];

'6'...以上の値が表示されると、コードは失敗します。

さらに、 のすべての文字を使用する場合はdigits、ループを次のようにする必要があります。

for (int i = 0; i < digits.length(); i++)

全体として、これは非常に奇妙なことです。配列要素 1 (たとえば) に有効な値は、(数字が存在する場合) または 0 (存在しない場合のデフォルト)のみであるためです。特に、これにより、数字が発生した位置に関するすべての情報'1'が失われます。クラスが に似ていることを意図している場合は、次のように書く必要があります。BigInteger

arrayToStoreTheDigits = new int[digits.length()];
for (int i = 0; i < arrayToStoreTheDigits.length; i++)
{
    // TODO: Digit validation
    arrayToStoreTheDigits[i] = digits.charAt(i) - '0';
}

そのため、渡した後"543210"、の配列が得られます{ 5, 4, 3, 2, 1, 0 }。それは今、有益な情報です。

于 2013-01-03T06:50:44.453 に答える
1

ループに問題があります:

for (int i = 0; i < 5; i++) {  // condition shoule be i < 6
    // arrayToStoreTheDigits[digits.charAt(i)] = digits.charAt(i); // convert String to integer
    // shoule be
    arrayToStoreTheDigits[Integer.parseInt(digits.charAt(i))] = Integer.parseInt(digits.charAt(i));
    System.out.println(digits.charAt(i));
}
于 2013-01-03T06:51:08.610 に答える