2015-05-02 31 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 –