我已经编写了将十进制整数转换为二进制格式的程序:
int b=17,i=0;
int s[]=new int[10];
while(b>0)
{
s[i]=(b%2);
b=b/2;
i++;
}
System.out.println(Arrays.toString(s));
此打印:[1、0、0、0、1、0、0、0、0、0]
但是我希望使用while()循环将“ 10001”作为输出,
int j;
for(j=i-1;j>=0;j--)
{
System.out.print(s[j]);
}
这会按照我的要求打印:'10001',但是还有其他方法可以在不使用循环的情况下获取此输出吗?
或
是否有办法在1,0,0,1之后删除[1、0、0、0、1、0、0、0、0、0]中多余的0?
答案 0 :(得分:1)
但是还有其他方法可以在不使用循环的情况下获取此输出吗?
无论您如何执行, 都会在某个地方的代码中循环,只是不一定要在您编写的代码中。因此,我将“无需使用循环”解释为“无需自己编写循环”。
一种方法是使用Stream
:
String result = Arrays.stream(s).map(x -> Integer.toString(x)).collect(Collectors.joining());
System.out.println(result);
您可能还希望反转字符串,在这种情况下,您可以这样做:
String result = Arrays.stream(s).map(x -> Integer.toString(x))
.collect(
StringBuilder::new,
StringBuilder::append,
StringBuilder::append)
.reverse().toString();
另一种方法是在将数字转换为二进制时直接创建所需的字符串:
int b=17;
StringBuilder sb = new StringBuilder();
while(b>0)
{
sb.append(b%2);
b=b/2;
}
System.out.println(sb.reverse());
是否有办法在1,0,0,1之后删除[1、0、0、0、1、0、0、0、0、0]中多余的0?
由于数组大小是固定的,因此您必须创建一个新数组:
int[] withoutTrailingZeros = Arrays.copyOfRange(s, 0, i);
答案 1 :(得分:1)
从头开始没有数组,并将结果附加到String
。这将消除到String
的转换数组。
int b=17;
String result = "";
while(b>0)
{
result = (b%2) + result;
b=b/2;
}
System.out.println(result);
String
也是字符数组,因此在内部您不会闪避任何数组。
正如@DodgyCodeException所指出的那样,将int转换为binary的原始OP代码正在生成反向的二进制字符串/数组。上面的代码已经修复了。
答案 2 :(得分:0)
尝试如下操作:
String string = Arrays.toString(s);
System.out.println(string .substring(1, string .length() - 1));
编辑1:
int b = 17;
StringJoiner stringJoiner = new StringJoiner(",");
while (b > 0) {
stringJoiner.add(String.valueOf((b % 2)));
b = b / 2;
}
System.out.println(stringJoiner.toString());
答案 3 :(得分:0)
您介意使用ArrayList代替Array
int b=17,i=0;
// int s[]=new int[10];
List<Integer> s = new ArrayList<>();
while(b>0)
{
s.add(b%2);
b=b/2;
i++;
}
System.out.println(s.toString());