本帖最后由 darkblue2016 于 2016-5-11 23:26 编辑
分析以下需求,并用代码实现:
(1)打印1-100之间的所有素数及个数
(2)每行输出5个满足条件的数,之间用空格分隔
(3)大于1的能被1和其本身整除的数叫素数
(4)如:2 3 5 7 11
这道题是java基础部分的关于循环语句的提高题,原本是给定答案的,但答案提供的两种方法让人不是特别好理解,
为此本帖打算分享一下个人的一点编程思路,因所学有限,有班门弄斧之处还望谅解.如果有同学还有更好的见解,
大家可以一起交流一下.
/*
首先需要分析一下如何判断一个数是不是素数,分析素数的定义可知大于一且只能被一和它本身整除的数叫素数,
那么最简单的想法就是让这个数与介于1到它本身之间的数做取余运算,借助条件语句判断一下除一和它本身外是
否还有其他可以整除的数,若没有则是素数,否则就不是素数.
第一步:借助第一层for循环获取2~100(因为1不是素数故直接排除)之间的数用于做判断;
第二步:借助第二层for循环获取1到所要作判断的数之间的数;
第三步:在第二层循环中借助if语句进行能否整除的判断;
*/
代码如下:
- class Test {
- public static void main(String[] args) {
- int count1 = 0; // count1用来统计素数的个数;
- // count2用来统计当前所要判断的数能被介于1到其本身之间的数整除的数的个数,注意内部循环结束后count2必须清零;
- for (int i = 2;i <= 100 ;i++ ) { //注意此处变量i是从2开始的;
- int count2 =0;
- for (int j = 1;j <= i ;j++ ) {
- if (i % j == 0) {
- count2++;
- }
- }
- //根据count2的作用,当其值大于2,则说明当前所要判断的数不是素数,所以要用continue终止本次循环,继续下一次循环;
- if (count2 > 2) {
- continue;
- }else {
- count1++;
- System.out.print(i+" ");
- }
- if (count1 % 5 == 0) {
- System.out.println();
- }
- }
- System.out.println("1-100之间的所有素数的个数为" + count1+"个");
- }
- }
复制代码 后续改进代码更简洁一些,累加变量由原来的两个变为了一个,此时更容易让人理解,continue的作用很关键!
- class Test {
- public static void main(String[] args) {
- int count = 0;
- /*对外层循环进行了标号,一旦满足if语句的判断条件即可确认当前数为非素数,此时内层循环没有继续下去的必要,所以直接终止本次外层循环,继续下一循环.*/
- outer:for (int i = 2;i <= 100;i++ ) {
- for (int j = 2;j < i ;j++ ) {
- if (i % j == 0) {
- continue outer;
- }
- }
- count++; //此处的累加变量是用来统计素数的个数;
- System.out.print(i + " ");
- if (count % 5 == 0) {
- System.out.println();
- }
- }
- System.out.println("1-100之间的所有素数个数为: " + count);
- }
- }
复制代码
|
|