最近有人要求我编写一个toString
方法,该方法返回数组中的数字,如下所示:
在数字右边每三位数后 添加一个逗号,但是如果该数字的位数为3或更少 不会添加逗号。
但是我遇到了一个问题:该方法总是返回值0,
。如何调整代码以返回正确的格式?
public class BigNum {
int[] num;
final int MAX_DIGITS = 50;
public BigNum() {
this.num = new int[MAX_DIGITS];
this.num[0] = 0;
for(int i=1 ; i<this.num.length ; i++)
this.num[i] = -1;
}
public BigNum(long n) {
int number = (int)n;
this.num = new int[MAX_DIGITS];
for (int i = 0; i < this.num.length; i++) {
num[i] = number % 10;
number /= 10;
}
}
public String toString(){
String toReturn = "";
this.num = new int[MAX_DIGITS];
for(int i=0 ; i<this.num.length ; i++)
if(this.num.length>=1 && this.num.length<=3)
toReturn = num[i] + "";
for(int j=0 ; j<this.num.length ; j+=3)
toReturn = num[j] + "," ;
return toReturn;
}
答案 0 :(得分:0)
您可以尝试以下代码。记住要复制BigNum构造函数。对以下代码进行了以下更改:
创建实例数组的长度等于输入中的位数,但不等于MAX_DIGITS。
更改了toString方法。
public BigNum(long n) {
int number = (int)n;
int[] tempNum = new int[MAX_DIGITS];
int counter=0;
while(number>0) {
tempNum[counter] = number % 10;
number /= 10;
counter++;
}
this.num = Arrays.copyOfRange(tempNum, 0, counter);
}
public String toString(){
String toReturn = "";
if(this.num.length>=1 && this.num.length<=3) {
for(int i=this.num.length-1 ; i>=0 ; i--) {
toReturn += num[i];
}
}else {
int commaPos = this.num.length%3==0?3:this.num.length%3;
int counter=0;
while(counter<this.num.length) {
if(counter==commaPos) {
toReturn+=",";
commaPos+=3;
}
toReturn+=num[this.num.length-1-counter]
counter++;
}
}
return toReturn;
}
我使用以下代码测试了上述内容:
public static void main(String[] args) {
BigNum bn = new BigNum(1234567);
System.out.println(bn);
}
输出:1,234,567