我正在尝试创建一个java程序,用户输入一个十进制数,然后转换为二进制数。这是我到目前为止,但是while循环只循环一次,当我输入8时只给我0。我知道二进制中的8是1000所以我不明白我做错了什么。我需要编码很简单。请帮助谢谢
import java.util.Scanner;
public class binary
{
public static void main (String [] args)
{
Scanner scan = new Scanner(System.in);
int userNum = 0;
int binary = 0;
double newNum = 0;
int count = 0;
System.out.print("Enter a positive base 10 number: ");
userNum = scan.nextInt();
System.out.println();
for(; (Math.pow(2,count) <= userNum); count++)
{
}
while(!(count == 0))
{
if(userNum/Math.pow(2,count) != 0)
{
binary = userNum/(int)Math.pow(2,count);
System.out.print(binary);
}
userNum %= Math.pow(2,count);
count--;
userNum %= (int)Math.pow(2,count));
}
}
}
答案 0 :(得分:2)
你不应该重新发明轮子,使用Integer.toBinaryString(int)
等等,
Scanner scan = new Scanner(System.in);
System.out.print("Enter a positive base 10 number: ");
if (scan.hasNextInt()) {
int userNum = scan.nextInt();
System.out.printf("%d decimal is %s binary%n", userNum,
Integer.toBinaryString(userNum));
}
此外,Java类应以大写字母开头。因此,binary
应该是Binary
。最后,如果您需要将二进制转换为十进制,则可以使用Integer.parseInt(String, 2)
。
答案 1 :(得分:0)
您可以使用以下逻辑:
package com.java2novice.algos;
public class DecimalToBinary {
public void printBinaryFormat(int number){
int binary[] = new int[25];
int index = 0;
while(number > 0){
binary[index++] = number%2;
number = number/2;
}
for(int i = index-1;i >= 0;i--){
System.out.print(binary[i]);
}
}
public static void main(String a[]){
DecimalToBinary dtb = new DecimalToBinary();
dtb.printBinaryFormat(25);
}
}
答案 2 :(得分:0)
你刚才:
for(userNum = userNum; (Math.pow(2,count) <= userNum); count++)
{
}
而不是:
for(userNum = userNum; (Math.pow(2,count) <= userNum); count++){
while(!(count == 0))
{
if(userNum/Math.pow(2,count) != 0)
{
binary = userNum/(int)Math.pow(2,count);
System.out.print(binary);
}
newNum = userNum%Math.pow(2,count);
count--;
userNum = (int)(newNum%(int)Math.pow(2,count));
}}
}
}
基本上你是空的,如果。
答案 3 :(得分:0)
几个问题:
你的count
将始终开得太高,因为for
循环的最后一部分将再次递增它。
当while
为0时,您需要运行count
循环来检查最后一位。
其余的看起来应该是好的,但我不明白这些陈述对newNum
的意义。
算法的一个简单版本是使用按位运算符 - 而不是必须使用Math.pow
明确除以2的幂,您可以使用按位运算符来测试位是打开还是关闭,然后打印相应地输出1和0。例如:
public static void toBinary(int n) {
int mask = 1, nn = n;
while(nn != 0) {
mask << 1;
nn /= 2;
}
mask >>= 1;
while(mask != 0) {
System.out.print( (mask & n) ? "1" : "0" );
mask >>= 1;
}
}
编辑:此外,您的userNum = userNum
在for
循环中是多余的。只需在循环的赋值部分中使用null语句(;
)。所以:
for(; (Math.pow(2, count) <= userNum); count++) {