JAVA - 在while循环之外打印整数的位置?

时间:2014-11-22 15:13:32

标签: java exception printing while-loop

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 loop ,但是例如程序第一次进行循环时,结果为6,然后下次结果为4,则下一次0和下一次16 ..

以这种形式打印:(初始数字为vish = 16 ,shir = 29 ,n = 3

  • 6
  • 4
  • 0
  • 16

..我想要实现的是它打印出 26 ..实际上是(6 + 4 + 0 + 16)

..有时java报告线程主java.lang.ArithmeticException中的异常:/ by zero

3 个答案:

答案 0 :(得分:0)

在完成所有计算后将其打印出来以获得正确的结果。 在您的情况下,您计算stranica2可以为null。你应该检查一下 if (stranica !=0) { continue ;}

您的解决方案的问题在于i没有结束。 i开始等于n并且下降,while循环中的检查也适用于小于n的数字,这意味着您有一个无限循环。

答案 1 :(得分: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;

 }

答案 2 :(得分: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值为:

  • 6
  • 4
  • 0
  • 0(不是16)

结果是10。

最后但并非最不重要:

你为什么这样做?

ostanek1 = shir % stranica1;

stranica1不等于0吗?你怎么会得到ostanek1价值?它将为您提供除零异常。

修复此问题:

ostanek1 = shir % stranica2;