我对编程还是个新手,我正在尝试了解循环。我设法让一段代码工作,但我仍然不完全理解它是如何工作的。我在网上找到了一个类似的程序,它是用for循环编写的,我设法让它作为while循环工作(花了我几天时间!!!)。我正在尝试理解内部循环在做什么。
我知道外部循环在每次循环迭代时都要检查x是否小于100。为什么需要在循环中嵌套y变量,为什么它被设置为2,为什么它每次都需要递增1?还有,有没有办法不使用**break就退出循环?* *?
我在这里看到了一些其他的这种类型的程序的例子,但是我希望有人能解释一下这个程序是如何具体工作的。
提前感谢!!!
class PrimeNumbers {
public static void main(String args[]) {
int x = 2;
while (x <= 100) {
int y = 2;
while (y <= x) {
if (x == y) {
System.out.println(x);
}
if (x % y == 0) {
break;
}
y++;
}
x++;
}
}
}
7条答案
按热度按时间sf6xfgos1#
评论是你的朋友:
命名你的变量会更容易
huwehgph2#
为什么需要在循环中嵌套y变量,为什么将其设置为2,为什么每次都需要递增1?
我们需要重置循环中的变量,因为需要对x的每个值应用测试。x的值是素数的潜在候选项。为什么将其设置为2是因为每个数都可被1整除。
另外,是否有一种方法可以在不使用break的情况下退出循环;?
你可以在第二个while循环中添加另一个条件,一旦你的退出条件被满足,这个标志就可以被设置。
gajydyqb3#
变量
x
迭代从2到100的所有数字。在这个循环中,你将处理一些东西来确定x是否是质数。你的代码要做的是迭代从2到x的所有数字,并尝试每个数字是否能整除x。变量y
是第二个数字。例如,当您在
x = 4
. y将首先等于2的迭代中时,然后检查x%y==0
,这意味着您检查x是否可被y整除。在本例中,它为真。因此x不是质数,因此您退出内部循环(break;
语句)。然后x=5
,你有y=2
.这不除x.你增加y(y=3
)。这也不会除以x。您可以递增y(y=4
)。这不会除以x。您可以递增y如果y==x
返回真,这意味着你已经遍历了y的所有值,所以x是一个质数,所以你打印x,退出内部循环,递增x(x=6
)等等...h9vpoimq4#
正如你所看到的,你的第一个循环是检查x是否小于100,然后你的下一个循环是对所有小于x的数进行除法运算,如果有一个小于x的数并且mod为0,那么它就不是质数,例如我们的x = 5,在第一次迭代y = 2时,5%2 = 1,因为mod不为0,所以你不能进行除法运算,然后y递增1,5%3 = 2mod是2,还是不可整除的,以此类推,你会发现y递增到5,这意味着没有更小的整数,可以除以x,因为x=5是质数,当你不明白是怎么回事时,试着把所有的东西都打印出来。
wnavrhmk5#
要知道一个数是否是质数,只有当这个数(x)被他自己或1相除时,余数才是零。
所以在这个代码中,你用每个数字(x)除以1到该数字本身之间的所有数字(y)。
这就是为什么
if (x % y == 0) { break; }
这意味着,如果除以
y
,在1和X之间有一个rest = 0
,你停止循环,因为它不会是素数。您可以使用变量标志删除断点,但是循环将执行更多的迭代。
zd287kbt6#
print('1到100之间的质数是:')
对于范围(2,101)中的数值:如果num〉1:对于范围(2,num)中的i:如果(编号% i)== 0:中断其他:打印(数字)
acruukt97#