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);

If digits.charAt(i)is'5'整数值为 53,因为这是字符的 UTF-16 代码单元'5'。如果您试图在将其视为数字时提取其值,则需要使用Character.digit. '0'或者,如果您真的只关心 0-9,并且确信不会有其他字符,您可以只减去。

所以你可以这样写你的代码:

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(例如)有效的唯一'1'值将是(如果数字存在)或 0(默认值,如果不存在)。特别是,这会丢失有关数字出现位置的所有信息。如果该类旨在类似于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 回答