Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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中,如何将数字放入while循环中的数组?_Java_Binary_Decimal - Fatal编程技术网

在java中,如何将数字放入while循环中的数组?

在java中,如何将数字放入while循环中的数组?,java,binary,decimal,Java,Binary,Decimal,我想把两个二进制数相加,然后在二进制系统中求和。我把它们的和写成十进制,现在我正试着把它变成二进制。但有一个问题是,当我将它们的和(十进制)除以2并找到余数(在while循环中)时,我需要将余数放入数组中,以便将其反向打印。但是,数组部分有一个错误。你对我的代码有什么建议吗?提前谢谢 这是我的密码: import java.util.Scanner; public class ex1 { public static void main(String[] args) {

我想把两个二进制数相加,然后在二进制系统中求和。我把它们的和写成十进制,现在我正试着把它变成二进制。但有一个问题是,当我将它们的和(十进制)除以2并找到余数(在while循环中)时,我需要将余数放入数组中,以便将其反向打印。但是,数组部分有一个错误。你对我的代码有什么建议吗?提前谢谢

这是我的密码:

import java.util.Scanner;

public class ex1 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();
        int k = dec1(n)+dec2(m);

        int i=0,c;
            int[] arr= {};

        while(k>0) {
            c = k % 2;
        k = k / 2;
                arr[i++]=c;   //The problem is here. It shows some //error
        }
          while (i >= 0) {
        System.out.print(arr[i--]);
        }
    }

    public static int dec1(int n) {
        int a,i=0;
        int dec1 = 0;
        while(n>0) {
        a=n%10;
        n=n/10;
        dec1= dec1 + (int) (a * Math.pow(2, i));
        i++;
        }
        return dec1;
    }

    public static int dec2(int m) {
        int b,j=0;
        int dec2 = 0;
        while(m>0) {
        b=m%10;
        m=m/10;
        dec2= dec2 + (int) (b  * Math.pow(2, j));
        j++;    
        }
        return dec2;
        }


}
在这里:

创建一个空的数组。数组在Java中不会动态增长。因此,任何访问
arr
的索引的尝试都将导致ArrayIndexOutOfBounds异常。因为空数组根本没有“索引范围”

因此:

  • 首先询问用户要输入的数字的计数
  • 然后像这样:
    int[]arr=newint[targetCountProvidedByUser]

“更多”的真正答案是使用
List numbersFromUsers=new ArrayList()这样的集合类允许动态添加/删除元素。但是对于Java新手来说,最好先学习如何处理数组。

为什么要使用两种不同的方法来进行相同的转换?你只需要一个

你可以用main方法来做这件事

intk=dec1(n)+dec1(m);
与使用Math.pow(返回双精度且需要强制转换)不同,另一种选择是:

int-dec=0;
int mult=1;
int bin=10110110;//128 + 48 + 6 = 182.
而(bin>0){
//获取最正确的位
int位=(bin%10);
//证实
如果(位<0 | |位>1){
抛出新的IllegalArgumentException(“不是二进制数”);
}
//将每个乘积相加,乘以2的运行幂。
//这是必需的,因为位取自右侧。
dec=dec+多*位;
bin/=10;
mult*=2;//2的下一次幂
}
系统输出打印LN(十二月);//印刷品182
另一种方法是使用字符串表示二进制数,并从左侧(高阶位置)取位

String bin1=“10110110”;
int dec1=0;
//从左到右(从高到低)迭代字符
for(char b:bin1.toCharArray()){
//通过减去字符“0”将其转换为整数。
int位=b-“0”;
//证实
如果(位<0 | |位>1){
抛出新的IllegalArgumentException(“不是二进制数”);
}
//从左到右,先乘以2,然后加上该位
//每次通过时,总和将乘以2,这将使所有内容向左移动
//一点。
dec1=dec1*2+位;
}
System.out.println(dec1);//印刷品182
以二进制形式显示结果的一种可能方法是使用StringBuilder并简单地将转换后的位插入到字符中

公共静态字符串toBin(int-dec){
StringBuilder sb=新的StringBuilder();
而(12月>0日){
//通过在0处插入,位以
//顺序正确。正在将“0”添加到低位
//dec的位转换为字符。
sb.插入(0,(字符)((dec&1)+“0”);
//右移以转换下一位。
12月>>=1;
}
使某人返回字符串();
}

数组不会更改其大小,因此使用
{}
初始化数组,然后尝试将值放入其中是行不通的。您必须使用大小初始化数组。或者,您可以使用列表并添加元素。然后你可以向后穿过它,看起来你想:-)好的,我知道了。谢谢大家!
int[] arr= {};