【问题标题】:Big number in an array - constructor数组中的大数 - 构造函数
【发布时间】:2014-01-06 15:52:59
【问题描述】:

在 Java 中,我必须创建一个数组的构造函数,其中一个大数的每个数字都是该数组的不同字符。

这是主类:

 public static void main(String[] args) {
    BigNumber bn1 = new BigNumber(1500);
    BigNumber bn2 = new BigNumber("987349837937497938943242");  

    System.out.println("line 1: " + bn1);
    System.out.println("line 2: " + bn2);
}

我尝试使用 String 创建一个构造函数,但我不确定它是否好:

private String number;
private char[] n = null;

public BigNumber(String _number){
    number = _number;
    n = new char[number.length()];

    for (int i = 0; i < n.length; i++){
        n[i] = number.charAt(i);
    }
}

或者也许有其他方法可以做到这一点?

【问题讨论】:

  • 我认为 for 循环没问题。不要害怕使用它们:)

标签: java arrays numbers digit


【解决方案1】:

我必须创建一个数组的构造函数,其中一个大数的每个数字都是这个数组的不同字符。”

你可以这样做

n = _number.toCharArray();

返回字符串的字符数组

private char[] n = null;

public BigNumber(String _number){
    n = _number.toCharArray();
}

如果要将 BigNumber 对象打印为String,则需要@Override BigNumber 类中的toString() 方法

public class BigNumber {
    ....

    @Override
    public String toString(){
        return Arrays.toString(n);
    }
}

您当前的打印方式不会像您期望的那样打印数组。您需要覆盖 toString() 方法以将对象输出为具有所需输出格式的 String 表示形式。我的简单示例只是将数组打印为字符串,尽管您可以选择以任何您喜欢的方式对其进行格式化。但请记住,方法必须返回String

那你就可以做这个

BigNumber bn2 = new BigNumber("987349837937497938943242");  
System.out.println("line 1: " + bn2);

还要注意:你不能这个

BigNumber bn1 = new BigNumber(1500);

作为BigNumber 构造函数只接受String 参数,其中1500int。你可以这个

BigNumber bn1 = new BigNumber(String.valueOf(1500));

更新

如果您想接受 int 作为构造函数的参数,则需要创建一个单独的构造函数,该构造函数接受 int 参数。在这种情况下,您还需要将int 设为String,然后获取字符数组。所以你会有两个构造函数,一个接受String,一个接受int

public BigNumber(int number){
    String numString = String.valueOf(number);
    n = number.toCharArray();
}

【讨论】:

  • 为什么他不能重载构造函数?
  • @ArnaldoIgnacioGasparVejar 没有理由他不能,但这违背了创建字符数组的全部目的。不过,我仍然会发布编辑
【解决方案2】:

String 有一个 toCharArray() 方法,可以满足您的需求。

n = _number.toCharArray();

值得注意的是,toCharArray 返回原始字符串的副本。因此,您对数组所做的任何更改都不会反映在源字符串中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2019-11-26
    • 2020-02-08
    • 1970-01-01
    • 2013-03-03
    相关资源
    最近更新 更多