我刚刚开始学习Java,我想尝试使用数组来表示大的负数。
我们说我有一个数组
[-2, 0, -5] and this represents the number -502
我尝试过使用StringBuilder,但打印出来
-50-2
这是我现在的代码。有没有办法让它可以附加第一个底片,然后在构建新String时跳过其余的底片?
StringBuilder sb = new StringBuilder();
for(int x = arr.length-1; x>=0; x--){
sb.append(arr[x]);
}
String check = sb.toString();
System.out.println(check);
答案 0 :(得分:5)
使用最后一个字符(带有适当的符号)初始化字符串缓冲区,然后忽略其余的符号。
StringBuilder sb = new StringBuilder();
sb.append(arr[length-1]);
for (int x = arr.length-2; x>=0; x--) {
sb.append(Math.abs(arr[x]));
}
String check = sb.toString();
System.out.println(check);
答案 1 :(得分:1)
在字符串的开头添加一个减号,并在附加时使用Math.abs(arr[x])
。
它应该是这样的:
StringBuilder sb = new StringBuilder();
sb.append("-");
for(int x = arr.length-1; x>=0; x--){
sb.append(Math.abs(arr[x]));
}
String check = sb.toString();
答案 2 :(得分:1)
是的,当然。你的问题不清楚,但我认为这样做你想要的:
if(x == arr.length-1 || x > 0)
sb.append(arr[x]);
else
sb.append(-arr[x]);
-
取消了。 -(-5)
只是5。
或者:(这可能会或可能不会更容易理解)
if(x == arr.length-1)
sb.append(arr[x]);
else
sb.append(Math.abs(arr[x]));
Math.abs
是一种确保数字不是负数的方法 - 如果您给出的数字是正数或零,则返回它。如果您给出的数字是负数,则返回正数。
可替换地:
sb.append((x == arr.length - 1) ? arr[x] : Math.abs(arr[x]));
这只是之前建议的“简写”。
答案 3 :(得分:1)
试试这个
StringBuilder sb = new StringBuilder();
Integer[] arr = new Integer[10];
if(arr[arr.length-1]<0)
sb.append("-");
for(int x = arr.length-1; x>=0; x--){
sb.append(Math.abs(arr[x]));
}
String check = sb.toString();
System.out.println(check);
答案 4 :(得分:0)
要在这种情况下“跳过剩余的负数”,请按“原样”取第一个负数,并在追加它们之前取剩余负数的绝对值。使用Math.abs(arr[x])
调用取绝对值。这样字符串构建器会查看您的数组,取-5,然后看到“02”,因为它附加了以下整数。
现在,如果要求你想要一个可能更长阵列的最大负数,比如说[-5,-3,2,6],你希望它返回-5632 ...从最小的负数开始number(-5)作为要追加的第一个数字,您可以使用原始数组的所有剩余值的绝对值创建一个新数组。然后逐步获取数组的最大未使用值。