Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用堆栈将整数转换为二进制_Java_Binary_Stack - Fatal编程技术网

Java 使用堆栈将整数转换为二进制

Java 使用堆栈将整数转换为二进制,java,binary,stack,Java,Binary,Stack,我对编程还不熟悉,但仍在努力想办法解决这个问题 我试图将一些余数推到堆栈上,然后弹出堆栈以给出二进制数字的输出 import java.util.Stack; public class BinaryNumber { private static Stack<Integer> stack = new Stack<Integer>(); private static int remainder; public static String binaryNum

我对编程还不熟悉,但仍在努力想办法解决这个问题

我试图将一些余数推到堆栈上,然后弹出堆栈以给出二进制数字的输出

import java.util.Stack;

public class BinaryNumber {
    private static Stack<Integer> stack = new Stack<Integer>();
    private static int remainder;

public static String binaryNum(int number){
        while (number > 0){ //while number > 0
            if ((number % 2 != 1) && (number % 2 != 0)){ //if number is not equal to zero or 1
                number = (number-1); //update number to one less
                int remainder = 1;
            }
            else{
            int remainder = number % 2; //get the remainder
            }
            stack.push(new Integer(remainder));
            number /= 2;
        }
        stack.push(new Integer(1));
        return "hello".toString(); //just a test
    }
public static void printStack(){
    while (!stack.isEmpty()){
        stack.pop();
    }
}
    public static void main(String[]args){
        binaryNum(20);
        printStack();
    }
}
import java.util.Stack;
公共类二进制数{
私有静态堆栈=新堆栈();
私有静态整数余数;
公共静态字符串binaryNum(整数){
while(number>0){//while number>0
如果((数字%2!=1)&&(数字%2!=0)){//如果数字不等于零或1
number=(number-1);//将number更新为少一个
整数余数=1;
}
否则{
int rements=number%2;//获取余数
}
stack.push(新整数(余数));
数目/=2;
}
stack.push(新整数(1));
返回“hello”.toString();//只是一个测试
}
公共静态void printStack(){
而(!stack.isEmpty()){
stack.pop();
}
}
公共静态void main(字符串[]args){
二进制数(20);
printStack();
}
}
我似乎没有得到任何输出。我试着在纸上解决这个问题,但不知道它在哪里失败了。我之前确实在那里有一些println语句,而
binaryNum
中的if语句似乎总是被调用


谢谢。

您需要修改以下代码: 导入java.util.Stack

public class BinaryNumber {
    private static Stack<Integer> stack = new Stack<Integer>();
    private static int remainder;

public static String binaryNum(int number){
        while (number > 0){ //while number > 0
            if ((number % 2 != 1) && (number % 2 != 0)){ //if number is not equal to zero or 1
                number = (number-1); //update number to one less
                **remainder = 1;**
            }
            else{
                **remainder = number % 2; //get the remainder**
            }
            stack.push(new Integer(remainder));
            number /= 2;
        }
        stack.push(new Integer(1));
        return "hello".toString(); //just a test
    }
public static void printStack(){
    while (!stack.isEmpty()){
        **System.out.println(stack.pop());**
    }
}
    public static void main(String[]args){
        binaryNum(20);
        printStack();
    }
}
公共类二进制数{
私有静态堆栈=新堆栈();
私有静态整数余数;
公共静态字符串binaryNum(整数){
while(number>0){//while number>0
如果((数字%2!=1)&&(数字%2!=0)){//如果数字不等于零或1
number=(number-1);//将number更新为少一个
**余数=1**
}
否则{
**余数=数字%2;//获取余数**
}
stack.push(新整数(余数));
数目/=2;
}
stack.push(新整数(1));
返回“hello”.toString();//只是一个测试
}
公共静态void printStack(){
而(!stack.isEmpty()){
**System.out.println(stack.pop())**
}
}
公共静态void main(字符串[]args){
二进制数(20);
printStack();
}
}

您所做的是初始化两个局部变量“余数”。添加到堆栈对象的是全局变量

您不进行任何打印-这就是没有输出的原因

试试这个(它确实有效):

import java.util.Stack;

public class BinaryNumber {
    private static Stack<Integer> stack = new Stack<Integer>();

    public static void binaryNum(int number) {
        // Important! In case you call binaryNum twice without calling printStack in between.
        stack.clear();
        while (number > 0) { // while number > 0
            int remainder = number % 2; // get the remainder
            stack.push(new Integer(remainder));
            number /= 2;
        }
    }

    public static void printStack() {
        while (!stack.isEmpty()) {
            System.out.print(stack.pop());
        }
    }

    public static void main(String[] args) {
        binaryNum(20);
        printStack();
    }
}
import java.util.Stack;
公共类二进制数{
私有静态堆栈=新堆栈();
公共静态void binaryNum(整数){
//重要提示!如果您两次调用binaryNum,而中间没有调用printStack。
stack.clear();
while(number>0){//while number>0
int rements=number%2;//获取余数
stack.push(新整数(余数));
数目/=2;
}
}
公共静态void printStack(){
而(!stack.isEmpty()){
System.out.print(stack.pop());
}
}
公共静态void main(字符串[]args){
二进制数(20);
printStack();
}
}

if((数字%2!=1)&&(数字%2!=0))没有意义。除以2后的余数总是0或1。谢谢,我对模运算符实际给出的结果感到有点困惑。非常感谢,很高兴看到我离得有多近。我总是以一种复杂的方式结束,而不是简单的方式!我想我会慢慢学会的。我在想,在模数%2之后,我可能会得到除1或0以外的其他数字,所以我试图进行补偿,但这是干净的。