二进制计算器分配(Java)

时间:2015-12-11 03:00:44

标签: java arrays binary

以下是作业要求的说明:

对于本实验,您将在十进制中输入两个数字并将其翻译为二进制数。然后,您将以二进制形式添加数字并打印出结果。 输入的所有数字将介于0和255之间(包括0和255),二进制输出限制为8位。这意味着两个相加数字的总和也将限制为8位。如果两个数字的总和超过8位,请打印总和的前8位数字和“错误:溢出”消息。 您的程序应使用整数数组表示二进制数,其中数字(2 ^ 0)存储在索引0处,两位数(2 ^ 1)存储在索引1处,一直存储在索引处存储的2 ^ 7位数7。 您的程序应包括以下方法: int [] convertToBinary(int b)将参数转换为二进制值,并将其作为int数组存储。 void printBin(int b [])在一行中输出存储在数组中的二进制数。请注意,每个输出0或1之间应该只有一个空格。 int [] addBin(int a [],int b [])添加存储在数组中的两个二进制数,并以新的int数组返回总和。

当我将代码输入CodeRunner(测试代码并根据每个测试的结果返回一个等级)时,我似乎无法通过其中一个测试。这是我收到的消息:

* 44个测试中有43个通过正确。 你的分数是97%。

失败的测试是: 测试:addBin()方法     不正确:返回错误的数字*

继承我的代码:

import java.util.Scanner;

class Main {
public static int [] convertToBinary(int a){
int [] bin = {0,0,0,0,0,0,0,0};
for(int i = bin.length-1; i >= 0; i--){
 bin[i] = a%2;
 a = a/2;
}
return bin;
 }

public static void printBin(int [] b){
int z;
    for(z=0; z < b.length; z++){
      System.out.print(b[z] + " ");  
    }
    System.out.println();
}

public static int [] addBin(int [] c, int [] d){
int [] added = new int [8];
int remain = 0;
for(int x = added.length -1; x >= 0; x--)
{
 added[x] = (c[x] + d[x] + remain) % 2;
 remain = (c[x] + d[x] + remain)/2;
}
if (added[0] + c[0] + d[0] == 1){
added[0] = 1;
}
else if( (added[0] + c[0]+ d[0] == 2) || (added[0] + c[0]+ d[0] == 3) )  
{

System.out.println("Error: overflow");
}
//System.out.println(added);
//don't need to print added, but it is the only way to check it
return added;
}

public static void main(String[] args){
Scanner scan = new Scanner (System.in);
System.out.println("Enter a base ten number between 0 and 255, inclusive.");
int num1 = scan.nextInt();
System.out.println("Enter a base ten number between 0 and 255, inclusive.");
int num2 = scan.nextInt();

int [] bin;
bin = convertToBinary(num1);
System.out.println("First binary number:");
printBin(bin);
int [] bin1 = bin;

bin = convertToBinary(num2);
System.out.println("Second binary number:");
printBin(bin);
int [] bin2 = bin;


System.out.println("Added:");
{
printBin(addBin(bin1,bin2));
}
 }}

如果有人可以查看我上面的代码,看看他们是否可以告诉我需要更改什么来修复addbin()方法以便它通过所有测试,那就太棒了!即使您不确定它是否会起作用,我们也非常感谢您的帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

你正在添加错误的方向。

  

存储在索引0处的数字(2 ^ 0),存储在索引1处的二位数(2 ^ 1),一直存储在索引7处的2 ^ 7位数

这意味着:

int[] num1 = {1,0,1,0,0,0,0,0}; // 5
int[] num2 = {0,1,1,0,1,0,0,0}; // 22
int[] res = addBin(num1, num2); // 27 = {1,1,0,1,1,0,0,0}

你要从最后添加左侧滚动残留物:

  {  1,0,1,0,0,0,0,0}
+ {  0,1,1,0,1,0,0,0}
= {1,0,0,0,0,1,0,0,0} // Error: overflow