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 )
..我想要实现的是它打印出 26 ..实际上是(6 + 4 + 0 + 16)
..有时java报告线程主java.lang.ArithmeticException中的异常:/ by zero
答案 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
值为:
结果是10。
最后但并非最不重要:
你为什么这样做?
ostanek1 = shir % stranica1;
stranica1
不等于0吗?你怎么会得到ostanek1
价值?它将为您提供除零异常。
修复此问题:
ostanek1 = shir % stranica2;