2014-11-22 59 views
0
import java.util.*; 

public class Example { 

    public static void main(String[] args) { 


     Scanner beri = new Scanner(System.in); 

     long vish = 16;   
     long shir = 29; 
     long n = 3; 

     long del1 = 0; 
     long del2 = 0; 
     long stranica1 = 0; 
     long stranica2 = 0; 

     long ostanek1 = 0; 
     long ostanek2 = 0; 
     long ostala_shir = 0; 
     long plosce_shir = 0; 
     long ostala_vish = 0; 
     long plosce_vish = 0; 
     long ploscice = 0; 
     long del_dva = 0; 
     long del_n = 0; 

     long i = n; 

     while (i <= n) { 


      del_dva = 2; 
      del_n = i; 
      stranica2 = (long)Math.pow(del_dva, del_n); 

      if (vish % stranica2 == 0 && shir % stranica2 != 0) { 

       ostanek2 = vish % stranica2; 
       ostala_vish = vish - ostanek2; 
       plosce_vish = ostala_vish/stranica2; 


       ostanek1 = shir % stranica1; 
       ostala_shir = shir - ostanek1; 
       plosce_shir = ostala_shir/stranica2; 
       shir = ostanek1; 

       ploscice = plosce_shir*plosce_vish; 

      } 
      i--; 

     } 
    } 
} 

變量是我的語言,但這並不影響我的問題。 不介意初始化部分,變量不是英文的。 我的問題是:在我的程序中,我必須打印出結果。我已經嘗試用for循環,但例如程序第一次經過循環,結果是6,然後下一次結果它4,然後下一次0和下一次16。 。JAVA-在while循環之外打印出整數的位置?

它以這種形式打印出:(初始數字vish = ,桖= 中,n = 3

..我想達到的目的是,它打印出 ..這實際上是(6 + 4 + 0 + 16)

。有時還會java報告異常在線程中主java.lang.ArithmeticException:/ by零

+0

哪裏是你的打印語句? – SMA 2014-11-22 15:22:00

回答

0

你打印出來之後所有的計算得到正確的結果都完成了。 在你的情況下,你有stranica2可以爲null的計算。你應該檢查檢查 if (stranica !=0) { continue ;}

你的解決方案的問題是,沒有結束爲ii開始等於n並下降,while循環中的檢查也用於小於n的數字,這意味着您有一個無限循環。

0

計算像sum += value;總和的循環,當循環結束打印的sum

int sum = 0; 
for(int i = 0; i < count; i++) { 
// calculate value here 

... 

// now add the value in sum just before loop ends 
sum += value 
} 

System.out.prinln("Total is " + sum); 

java.lang.ArithmeticException ...這是因爲你將一定數量的零。在您的例子是

if (vish % stranica2 == 0 && shir % stranica2 != 0) { 

    ostanek2 = vish % stranica2; // here ostanek2 = 0 
    ostala_vish = vish - ostanek2; 
    plosce_vish = ostala_vish/stranica2; // so here ostala_vish is divided by zero 


    ostanek1 = shir % stranica1; 
    ostala_shir = shir - ostanek1; 
    plosce_shir = ostala_shir/stranica2; 
    shir = ostanek1; 

    ploscice = plosce_shir*plosce_vish; 

} 
0

更正代碼:

import java.util.*; 
public class Example { 

    public static void main(String[] args) { 
     // TODO code application logic here 
     Scanner beri = new Scanner(System.in); 

     long vish = 16; 
     long shir = 29; 
     long n = 3; 

     long del1 = 0; 
     long del2 = 0; 
     long stranica1 = 0; 
     long stranica2 = 0; 

     long ostanek1 = 0; 
     long ostanek2 = 0; 
     long ostala_shir = 0; 
     long plosce_shir = 0; 
     long ostala_vish = 0; 
     long plosce_vish = 0; 
     long ploscice = 0; 
     long del_dva = 0; 
     long del_n = 0; 

     long i = n; 

     //declare and initialize the following variable named sum 
     long sum = 0; 

     //don't use i<=n since this is a decrementing loop. Use i >= 0 instead 
     while (i >= 0) { 

      del_dva = 2; 
      del_n = i; 
      stranica2 = (long) Math.pow(del_dva, del_n); 

      if (vish % stranica2 == 0 && shir % stranica2 != 0) { 

       ostanek2 = vish % stranica2; 
       ostala_vish = vish - ostanek2; 
       plosce_vish = ostala_vish/stranica2; 

       ostanek1 = shir % stranica2; // you made a mistake here. 
       //If you write stranica1, then stranica1 = 0, 
       //and that's why you get the divide by zero exception 
       ostala_shir = shir - ostanek1; 
       plosce_shir = ostala_shir/stranica2; 
       shir = ostanek1; 

       ploscice = plosce_shir * plosce_vish; 

      } 

      //Do the following to get the sum of ploscice 
      sum = sum + ploscice; 
      i--; 

     } 
     //println should be outside the while loop. Same applies for for loop 
     System.out.println("The sum is = " + sum); 
    } 

} 

雖然,我幾乎解釋通過行內評論我的代碼裏面的一切,我要再次經歷在你的代碼的主要問題。

首先:

你爲什麼在while循環使用i < = n?您正在遞減i的值,因此這意味着它將變爲i = 3,然後i = 2,然後i = 1,然後i = 0,然後i = -1等等,使其成爲一個無限循環。

改爲使用i >= 0。因此,循環將在i = 0

其次結束:

因爲你是遞減的i的價值,所以當它成爲i = -1,然後stravica2值變爲0。因此,您可以通過0例外獲得鴻溝因爲你想通過stravica2將您if條件

三裏得到一個模運算:

您希望在while循環結束後獲得ploscice的總和。但是,您沒有聲明任何變量來保存ploscice的總和。

因此,您需要聲明一個名爲sum的長變量,在while循環之前將其初始化爲0,然後每次在循環中獲取總和sum = sum + ploscice。然後在的while循環外打印總和

應該讓你的結果:

10 

因爲,在循環每次迭代後的ploscice值:

  • 0(不是16)

結果是10

最後但並非最不重要:

你爲什麼這樣做?

ostanek1 = shir % stranica1; 

是不是stranica1等於0?你怎麼會得到ostanek1的價值?它會給你除以零的例外。

其固定到這一點:

ostanek1 = shir % stranica2;