2014-03-12 25 views
0

我的问题似乎很简单,但我试过寻找一个特定的答案,并没有找到。我发现了类似于我一直在寻找的答案,但他们只能设法让我更加困惑:Java:添加两个数字字符阵列

我想要做的就是添加两个字符数组并打印结果数组。该项目处理二进制数,但稍后我会处理基数2的算术,所以假设它们是基数为10的数字。

char[] array = {'1', '0', '0', '1'}; 
char[] array2 = {'1', '1', '0', '0'}; 
char[] sum = new char[4]; 
for(i=0; i < 4; i++){ 
    sum[i] = char(array[i] + array2[i]); 
    System.out.print(sum[i] + " "); 
    } 

我的回答是“b''b”当我运行它,所以它似乎有些ASCII转换正在发生的事情我猜?我的预期答案应该是“2101”,我意识到问题出在我的演员身上,我只是不知道如何继续。 Sum必须保留为字符数组作为程序参数的一部分。

编辑:我知道使用一个int数组总和将解决这个问题。正如我在我原来的文章中所说的,sum必须是一个字符数组作为这个项目的参数的一部分。

+1

为什么不用'int []'来代替? –

+1

字符不是数字,你为什么期待'1'+'1'='2'? –

+0

sum [i] = char(array1 [i])+ char(array2 [i]); – sp1rs

回答

0

试试这个。有用。 2 1 0 1生成成功(总时间:0秒)从char[]阵列int[]阵列

public static void main(String[] args) { 
     char[] array = {'1', '0', '0', '1'}; 
     char[] array2 = {'1', '1', '0', '0'}; 
     int[] sum = new int[4]; 
     for (int i = 0; i < 4; i++) { 
      sum[i] = Integer.parseInt(array[i] + "") + Integer.parseInt(array2[i] + ""); 
      System.out.print(sum[i] + " "); 
     } 
    } 

输出

运行改变这个总和变量

0

试铸字符转换为int。像

int i = Integer.parseInt(array[0] + ""); 

同样可以继续休息,然后执行加法

0

如果你想添加1 + 1并获得2则不要使用字符数组。使用int数组,或使用

int i = Integer.parseInt(array[0] + "");

0

的问题是你将它添加铸成int。 基本上,你需要做的是总结第一个字符,数组[i] +(array2 [i] - '0')。 这是因为使用第一个字符时,您会得到正确的ASCII-0索引值,但第二个字符应该是来自ASCII 0索引的多个步骤,因此“ - '0'”将给出你只是差异。

1

您可以使用Character.toString()char转换为String。其次,使用Integer.parseInt()char转换为int。然后添加这些整数。最后,使用Character.forDigit(digit, 10)int(数字)转换为char

char[] array = { '1', '0', '0', '1' }; 
char[] array2 = { '1', '1', '0', '0' }; 
char[] sum = new char[4]; 

for (int i = 0; i < 4; i++) { 
    sum[i] = Character.forDigit(
      Integer.parseInt(Character.toString(array[i])) + Integer.parseInt(Character.toString(array2[i])), 
      10); 
    System.out.println(sum[i]); 
} 

输出:

2 
1 
0 
1 

当然你也可以避开这一点,如果你使用一个整数阵列

int[] array = {1, 0, 0, 1}; 
0

使用int数组,而不是字符数组,将结果存储到你的sum char数组中。但是用int数组来存储结果。这将帮助你处理数字操作

1

你假设ASCII数学运行正确。 char变量被隐藏在引擎盖下的变量。添加char变量基本上取ASCII十进制值,然后添加这些值,然后给出ASCII字符表示。这有点过分简化了,但我想告诉你为什么会发生这种情况。

例如,如果'1'是ASCII十进制49,'1' + '1' = 49 + 49 = 98 98在ASCII是'b'

我建议只是开关阵列的类型,您使用的是int

int[] array = {1, 0, 0, 1}; 
int[] array2 = {1, 1, 0, 0}; 
int[] sum = new int[4]; 
for(int i = 0; i < 4; i++) { 
    sum[i] = array[i] + array2[i]; 
    System.out.print(sum[i] + " "); 
} 
0

我觉得这听起来像是在采访中问了一个问题。问题的意图是从两个数组中添加Integer个字符,并将结果输出为字符数组。

char[] a = { '4', '5', '6' }; 
    char[] b = { '7', '8', '9' }; 
    Integer c = Integer.parseInt(String.valueOf(a)) + Integer.parseInt(String.valueOf(b)); //456 + 789 = 1245 
    final char[] d = c.toString().toCharArray(); // d = {'1',2,'4','5'} 

该解决方案处理所有的情况,总和可以结束进位。