Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Eclipse - Fatal编程技术网

Java 十进制到二进制转换器

Java 十进制到二进制转换器,java,arrays,eclipse,Java,Arrays,Eclipse,我一直在尝试编写一个小而简单的程序,将dec数字转换为bin。其思想是,当用户输入一个正整数作为-cycle时,它必须经历所有轮的数字/2偏差,但它还必须得到尾部(idk数学术语,实际上是实际的bin数字),并将它们写入一个数组中,这就是我遇到的问题。我已经预先定义了30的数组大小(在没有指定长度的情况下,无法找到创建工作数组的方法)。我的想法是,然后我可以创建一个长度=索引的反向数组(我从第一个循环开始)从上一个数组中选择另一个for cycle等。但是当我测试第一个数组时,我得到的是空括号:

我一直在尝试编写一个小而简单的程序,将dec数字转换为bin。其思想是,当用户输入一个正整数作为-cycle时,它必须经历所有轮的数字/2偏差,但它还必须得到尾部(idk数学术语,实际上是实际的bin数字),并将它们写入一个数组中,这就是我遇到的问题。我已经预先定义了30的数组大小(在没有指定长度的情况下,无法找到创建工作数组的方法)。我的想法是,然后我可以创建一个长度=索引的反向数组(我从第一个循环开始)从上一个数组中选择另一个for cycle等。但是当我测试第一个数组时,我得到的是空括号:[]或根本没有打印,eclipse在代码中没有发现任何错误,我无法找出错误所在。我可以使用一些帮助。总之,代码如下:

    public static void decToBin(){


    int n;
    Scanner in = new Scanner(System.in);
    System.out.println("Enter a positive integer:");
    n = in.nextInt();
    in.close();

    if (n <= 0) {System.out.println("ERROR:n<=0");return;}
    else if (n > 0){

        int[] ostataci = new int[30];
        for (int i = 0;n <= 0;i++){

            ostataci[i] = n % 2;

            n = n / 2;
            // System.out.printf("%d %n", ostataci[i]); - even this one doesnt print at all
        }
    //  System.out.println(Arrays.toString(ostataci)); - nor this one


        }
    }   
public static void decToBin(){
int n;
扫描仪输入=新扫描仪(系统输入);
System.out.println(“输入一个正整数:”);
n=in.nextInt();
in.close();
if(n0){
int[]ostataci=新int[30];
对于(int i=0;n0){
i++;
ostataci[i]=n%2;
n=n/2;
}
}
int反向=i;
int[]反向=新的int[反向];
for(inti2=0;i2!=reverse;i--,i2++){
反向[i2]=ostataci[i];
系统输出打印(反转[i2]);
}
}

你的for循环对于(int i=0;n0){是错误的,你的代码会工作得很好。同样,把
int[]ostataci=new int[30];
改成
int[]ostataci=new int[32];
尽管你的for循环最好使用
列表
而不是
数组(int i=0;n直接误差在for循环中:

else if(n>0){
//因为n>0,所以它永远不会运行

对于(int i=0;n小数已经在计算机上转换为二进制,为什么不使用逐位操作检查保存的整数?例如,要检查int的n位是否已设置,请计算布尔值
(数字>>n)&1
。只要把它放在一个循环中,就完成了。其他人都把它弄得太复杂了。

这里有另一种方法,使用移位运算符和位掩码:

public static int[] dec2bin(int n) {
    int[] result = new int[32];
    for (int i = 0; i < 32; i++) {
        result[31-i] = n & 0x1;
        n >>= 1;
    }
    return result;
}
输出:

00000000000000000000000000000101
解释

上面的代码
n&0x1
是位屏蔽。0x1是数字
1
的十六进制表示法。在二进制中,该数字如下所示:

00000001
在for循环的第一次迭代中,
n
如下所示:

00000101
&
运算符逐位(按位)执行操作比较两个数字中的位,将它们“和”在一起,根据这些比较生成一个新的数字。如果其中一个或两个对应的位都是
0
,则结果位是
0
。如果两者都是
1
,则结果位是
1
。因此,对于上面列出的两个数字,'把它们放在一起是:

00000001
或者,在十进制中,
1
。您会注意到,这也是
n
中最右边位的位值。我们将其保存到最右边索引处的
结果
数组中

接下来,我们将(
>
n
右移
1
。这会将每一位移一位(最右边的位丢失),得到的
n
现在是:

00000010
我们将该过程重复32次(对于
int
的32位中的每一位),最后得到一个
结果
数组,其中包含正确的答案。

尝试以下方法:
Try this: 
package mypackage;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.Arrays;

public class Converter{

    final static int ARRAY_SIZE = 30;

    public static void main(String[] args){     
        int n;
        Scanner in = new Scanner(System.in);
        System.out.println("Enter a positive integer:");
        n = in.nextInt();
        in.close();

        if (n <= 0){
            System.out.println("ERROR:n<=0");
            return;
        }else if (n > 0){
            int[] ostataci = new int[ARRAY_SIZE];
            int i = 0;
            while (n>0){            
                ostataci[i] = n % 2;
                i++;
                n = n / 2;              
                System.out.printf("%d %n", ostataci[i]);
            }
        System.out.println("All done!");    
        System.out.println(Arrays.toString(ostataci));
        }
    }
}
包我的包; 导入java.io.BufferedReader; 导入java.io.IOException; 导入java.io.InputStreamReader; 导入java.util.Scanner; 导入java.util.array; 公共类转换器{ 最终静态整数数组_SIZE=30; 公共静态void main(字符串[]args){ int n; 扫描仪输入=新扫描仪(系统输入); System.out.println(“输入一个正整数:”); n=in.nextInt(); in.close(); if(n0){ int[]ostataci=新int[数组大小]; int i=0; 而(n>0){ ostataci[i]=n%2; i++; n=n/2; System.out.printf(“%d%n”,ostataci[i]); } System.out.println(“全部完成!”); System.out.println(Arrays.toString(ostataci)); } } }
试试ArrayList。你可能想在这方面有所收获:这是一个很好的算法练习。仅供参考,对于生产使用,
Integer。toString(你的数字,2)
完成这项工作。
00000101
00000001
00000010
Try this: 
package mypackage;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.Arrays;

public class Converter{

    final static int ARRAY_SIZE = 30;

    public static void main(String[] args){     
        int n;
        Scanner in = new Scanner(System.in);
        System.out.println("Enter a positive integer:");
        n = in.nextInt();
        in.close();

        if (n <= 0){
            System.out.println("ERROR:n<=0");
            return;
        }else if (n > 0){
            int[] ostataci = new int[ARRAY_SIZE];
            int i = 0;
            while (n>0){            
                ostataci[i] = n % 2;
                i++;
                n = n / 2;              
                System.out.printf("%d %n", ostataci[i]);
            }
        System.out.println("All done!");    
        System.out.println(Arrays.toString(ostataci));
        }
    }
}