我编写了一个程序来转换用户给出的十进制数,并将其转换为二进制数。例如,如果我输入2,它将返回10。然后,它计算二进制转换中的1和0的数量。请告诉我任何方式我的代码可以是更有效的,或如果我的代码有错误。如果有什么不好的做法,请告诉我。压痕对我也很重要。
package Conversions;
import java.util.Scanner;
public class BinaryChallenge {
@SuppressWarnings("resource")
public static void main(String[] args) {
int number;
Scanner scan = new Scanner(System.in);
int oneCount = 0;
int zeroCount = 0;
System.out.println("Enter a positive integer");
number = scan.nextInt();
String binary = "";
if (number < 0) {
System.out.println("Error: Not a positive integer");
} else {
while(number > 0) {
int mod = (number % 2);
number /= 2;
binary = Integer.toString(mod) + binary;
}
System.out.println("The binary representation of your integer is: " + binary + ".");
}
for (int i = 0; i < binary.length(); i++) {
if (binary.charAt(i) == '1') {
oneCount++;
} else if(binary.charAt(i) == '0') {
zeroCount++;
}
}
System.out.println("The binary representation of your integer has: " + oneCount + " ones.");
System.out.println("The binary representation of your integer has: " + zeroCount + " zeros.");
System.out.println("The binary representation of your integer has 0 twos... duh.");
}
}发布于 2015-11-07 18:40:06
乍一看,这看起来像是某种输入验证:
如果(数字< 0) {System.out.println(“错误:不是正整数”);}{ // .}/.System.out.println(“整数的二进制表示形式有:”+ oneCount +“ones.");System.out.println(”整数的二进制表示形式有:“+ zeroCount +”零“);
但这不是..。如果输入为负值,处理程序将很高兴地继续并打印该数字有0零和0 1,这不是真的。
最后,错误应该打印在System.err上而不是System.out上。
在您真正需要它们的地方声明变量,而不是更快。number,zeroCount,oneCount都可以稍后声明。
与其将代码转储到单个main方法中,不如对多个小方法进行分解,每个方法负责一件事。例如,您可以使用以下方法:
intint转换为二进制字符串而不是这样:
二进制= Integer.toString(mod) +二进制;
您可以简化为:
binary = mod + binary;Integer.toBinaryString(...)执行与主循环相同的操作。
发布于 2015-11-07 20:16:39
其他答案是正确的,您应该使用Integer.toBinaryString(...),但是如果您必须自己实现二进制转换,则最好使用按位运算符。这将允许你支持负数和正数。还可以在将1和0添加到结果字符串时,通过计数它们来节省时间和行数。
您使用的是@SuppressWarnings("resource")注释,而不是关闭扫描仪。您应该关闭它,或者,如果您使用的是Java 7,则应该使用try-with-resources语句。这将确保你的扫描仪关闭。
您使用3个不同的int变量,这些变量是在代码中的不同点创建的。最好是把它们放在同一个定义中,或者至少彼此接近。您可以从StringBuilder对象中获得更好的性能,而不是连接到相同的字符串。对于这样简单的代码来说,这并不是一个真正的问题,但将来可能会成为一个问题。
发布于 2015-11-07 18:39:54
Integer.toBinaryString(...):将整数参数的字符串表示形式作为基2中的无符号整数返回。valueOf(long[] longs)、cardinality()和length()方法,而不是String binary来获取oneCount和zeroCount。它还含蓄地处理负数。System.out,您可以使用:导入静态java.lang.System.out;然后只使用: out.printF=ln;println()和字符串连接在我的内部使用printf(...),例如:out.printf(“您的整数的二进制表示有%d的。”,oneCount);https://codereview.stackexchange.com/questions/110127
复制相似问题