2015-05-02 19 views
0

我正在编写一个程序,它可以实现笔和纸的复用。我使用了2个嵌套的for循环来遍历long值的2d数组。我认为将最后一个字符添加到工作区,然后添加第一个数字作为进位。笔和纸复制

  • 如何获取它,以便在内循环完成执行时,它会在下一组数字的第一列中创建一个零。然后如果是第二次,添加两个零等等,每次增加一个零的数量。当我得到这个工作时,我可以添加数组。

输出:

84882000000000000000 
    26228000000000000000 
    92946000000000000000 
    68664000000000000000 

代码:

 //set up temporary 2d array for working rowcount of array with be equal to length of numberTwo[] 
     long[][] workspaceArray = new long[numberTwo.length][20]; //columncount is arbitrary 

     long carry = 0; 
     //int u = 0; 
     //for every number in the bottom row 

     for (int i = numberTwo.length-1, rowNum = 0; i >= 0; i--, rowNum++){ 

      for (int j = numberOne.length-1, columnNum = 0; j >= 0; j--, columnNum++){ 
       //System.out.println("Multiplying: "+numberTwo[i]+" and "+numberOne[j]); 
       long value; 

       if (carry == 0){ 
        value = numberTwo[i]*numberOne[j]; 
       }else{ 
        value = numberTwo[i]*numberOne[j]+carry; 
       } 
       //System.out.println("A "+value); 
       long numberForWorkspace = extractLast(value); 
       System.out.println("adding "+numberForWorkspace+" to the workspace at "+i+" "+j); 
       workspaceArray[rowNum][columnNum] = numberForWorkspace; //not lining up properly, pass j into func 
       //carry = extractAllButLast(value); 


      } 


     } 
     for (int k = 0; k < workspaceArray.length; k++){ 
      for (int h = 0; h < workspaceArray[k].length; h++){ 
       System.out.print(workspaceArray[k][h]); 
      } 
      System.out.println(); 
     } 

编辑以澄清

更新:我试图做这样说,但我似乎后得到索引越界异常我跑过几个索引。

int numberOfZeros = 0; 
     for (int i = numberTwo.length-1, rowNum = 0; i >= 0; i--, rowNum+=numberOfZeros){ 

      for (int j = numberOne.length-1, columnNum = 0; j >= 0; j--, columnNum++){ 
       System.out.println("Multiplying: "+numberTwo[i]+" and "+numberOne[j]); 
       long value; 

       if (carry == 0){ 
        value = numberTwo[i]*numberOne[j]; 
       }else{ 
        value = numberTwo[i]*numberOne[j]+carry; 
       } 
       //System.out.println("A "+value); 
       long numberForWorkspace = extractLast(value); 
       System.out.println("adding "+numberForWorkspace+" to the workspace at "+rowNum+" "+columnNum); 
       workspaceArray[rowNum][columnNum] = numberForWorkspace; 
       //carry = extractAllButLast(value); 


      } 
      numberOfZeros++; 

回答

0

如果我理解正确的话,你需要的内循环的右括号后添加一行 - 有点像

if(workspaceArray.size > i + 1){ //Avoids ArrayIndexOutOfBoundsException 
    workspaceArray[i+1][0] = 0; 
} 
+0

更精确说明,内部的for循环已经执行了第一时间之后下一行我希望第一个值为0,其他所有内容都添加到最后(不能用0覆盖第一个索引)。然后对于第二行,我希望它在前面是两个零,然后添加数字。 –

+0

好吧,保持从0开始并在内循环结束时更新的循环迭代次数。在循环外取下一个数组,并根据需要添加多个0。然后你需要添加这个数字到你的其他索引 – saml

+0

谢谢,试过了,更新了原始帖子,获取了indexoutofbounds:E –