我一直在从事一项任务,我几乎完成了任务,但遇到了一些麻烦。我应该格式化输出,以便数字用逗号分隔每百位。例如:100,100,100,100。我进行了一些搜索,尝试实现不同的算法,但是尝试了一些,但遇到了NumberFormatException d!= java.lang.String错误。
我的代码如下:
public static void printOutput(char[] num1, char[] num2, int[] sum){
char[] largest = new char[1];
char[] smallest = new char[1];
char[] tmp = new char[1];
if(num2.length > num1.length){
largest = num2;
smallest = num1;
}else{
largest = num2;
smallest = num1;
}
String number1 = new String(largest);
String number2 = new String(smallest);
String total = Arrays.toString(sum);
System.out.printf("%,d", number1);
}
现在,编译可以运行,但是在运行时失败。我怀疑我在某处弄了东西。
输出应该看起来像这样,所有内容都完美对齐:
39,983,928,349,458 +
92,387,486,729
--------------------
40,076,315,836,187
我假设使用最大长度的列就可以了,然后从右到左填充所有内容,但是就像我说的那样,我很难弄清楚。
任何帮助将不胜感激。
谢谢!
答案 0 :(得分:0)
当您收到异常时,您还将获得发生异常的行号。在大多数情况下,行号比异常的实际类型有用。就您而言,您可以看到以下行中发生了异常:
System.out.printf("%,d", number1);
现在花点时间看看您要在这里做什么。您尝试打印的“%,d”部分不是普通的String,它是Formatter的一部分。换句话说,它告诉您如何显示变量。为了了解它的作用,我们需要看一下Formatter文档。我们看到了:
% indicates usage of the formatter
, indicates that "the result will include locale-specific grouping separators"
d indicates that "the result is formatted as a decimal integer"
现在,如果进一步阅读,我们还可以看到'd'的参数类别是整数。这意味着格式化程序会使用一个整数,并根据您所需的格式显示该整数。您要传递给格式化程序的参数是number1,它是一个 String !
您需要将char数组转换为int而不是String。