java学习之循环结构

1、循环结构★


概念:重复性操作

语法:

for(1;2;3){
    4
}

for(循环变量声明和初始化;循环条件;循环变量的变化){
	循环体(语句块);
}

循环变量声明和初始化;
while(循环条件){
    循环变量的变化;【注意】
    循环体(语句块);
    循环变量的变化;【注意】
    
}
/**
	1、循环变量声明和初始化      数字变量int i,初始化0,1;		N
	2、循环条件                i<[=]N;i>=0,1
	3、循环变量的变化           i++,i+=N,i--,i-=x
	4、循环体(语句块)           根据经验找【规律】
*/
/**
	使用循环解决问题的步骤
	1、审题确认重复是否存在(经验:唯有练习)
	2、设计四要素并套用循环语法
	3、检查循环是否正常结束
*/
循环跳转语句:

break:终止循环

continue:终止本轮循环,进入下一轮


 

求水仙花数

1、使用while循环 解决循环次数不固定的 顺序执行

public static void main(String[] args) {
        final int UNIT = 10;
        int num = 153,copy = num,sum = 0;

        while (copy>=1){
            sum += Math.pow(copy%UNIT,3);
            copy /= 10;
        }
        System.out.println(num+(num == sum ? "是":"非")+"水仙花数");
}

2、使用for循环 一般用来解决四要素明确且循环次数固定的循环

(先执行循环体,再执行循环变量的变化1->2->4->3->2->4->3往复,一直到条件2不成立)

int num = 153,copy = num,sum = 0;
for(int copy=num;copy>=1;copy/=UNIT){
    sum += Math.pow(copy%UNIT, 3);
}

素数(质数)

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

验证2到100以内任意一数是否为素数

public static void main(String[] args) {
        Random rand = new Random();
        int num = 2+rand.nextInt(99);   

        boolean is = true;               //假设它是
        for (int i =2; i <num ; i++) {   //定义i在里面声明,出了就没了,要在外声明提升作用域
            if(num%i == 0){
                is =false;               
                break;
            }
        }
        System.out.println(num+(is ? "是":"非")+"质数");
}

不用布尔值来确定,可以用 i 的值来确定

public static void main(String[] args) {
    Random rand = new Random();
    int num = 2+rand.nextInt(99);
    //循环正常结束的条件是它没有被余等于0   因为质数成立的条件就是不能被1和它之外的数整除
    //i在括号内声明,只能在循环中使用,出去就没了,所以此时要提升它的作用域
    for (int i=2; i <num ; i++) {   //循环正常结束时是i的值number
        if(num%i == 0){
            break;
        }
    }
    System.out.println(num+(i==num ? "是":"非")+"质数"); 
    //此时i会报红,因为i的作用域仅在for内,这句话的作用域在下面的大{}内
}

public static void main(String[] args) {
    Random rand = new Random();
    int num = 2+rand.nextInt(99),i = 1;
    
    for (; i <num ; i++) {   //在里面声明,出了就没了,要在外声明提升作用域
        if(num%i == 0){
            break;
        }
    }
    System.out.println(num+(i==num ? "是":"非")+"质数"); 
}

如果不需要通过循环就能证明它是质数,效率更高。   (2是最小的质数)

public static void main(String[] args) {

    Random rand = new Random();
    int num = 2+rand.nextInt(99);

    boolean is = true;
    if(num != 2 && num%2 ==0){      //不是2的偶数,一定不是质数
        is = false;                 
    }else{             //else要么是2,要么是奇数。再排除2假设它是奇数
        int i = 3;
        for(;i<=num;i+=2){             
            if(num%i ==0){
                break;
            }
        }
        is = i==num;    //i==num这个关系表达式决定了is的布尔值   
    }
    System.out.println(num+(is ? "是":"非")+"质数");
   
}

继续优化
//上述num验证只要到它一半就行了,因为一个数不能被大于它一半的值整除 ,只有偶数才会有一半,上述只有奇数,所以验证范围为i<num/2即可

继续优化
//其实只要验证到它的二次方根以内的质数就可以了

public static void main(String[] args) {

    Random rand = new Random();
    int num = 2+rand.nextInt(99);

    boolean is = true;
    if(num != 2 && num%2 ==0){      //不是2的偶数,一定不是质数
        is = false;                 
    }else if (num !=2){             //要么是2,要么是奇数。再排除2假设它是奇数
        int i = 3, U=(int)Math.sqrt(num);       //i全是奇数,但是开根之后有可能是偶数
        for(;i<=U;i+=2){         //  
            if(num%i ==0){
                break;
            }
        }
        is = i==U+(U%2==0 ? 1:2);        //偶数+1就是奇数
    }
    System.out.println(num+(is ? "是":"非")+"质数");
   
}

求1~1000之间不被7整除的数值之和

public static void main(String[] args) {
final int BEGIN = 1,END = 1000,EXCEPT = 7;
      int sum = 0;
        for (int i = BEGIN; i < END; i++) {
            if (i%EXCEPT==0){
                continue;                    //contnue完了到for这一步
            }
            sum += i;
        }
        System.out.println(sum);

}

从1开始累加排除不能被7整除的数值之和,求当和达到5000时,i的值是多少

public static void main(String[] args) {
    final int BEGIN = 1,END = 1000,EXCEPT = 7,LIMIT=5000;
            int sum = 0,i = BEGIN;
            for (; i < END; i++) {
                if (i%EXCEPT==0){
                    continue;
                }
                sum += i;
                if (sum>=LIMIT){
                    break;
                }
            }
     System.out.println(sum+","+i);
}

//如果没有break,注意最后i-1
public static void main(String[] args) {
    final int BEGIN = 1,EXCEPT = 7,LIMIT=5000;
        int sum = 0,i = BEGIN;
        for (; sum < LIMIT; i++) {
            if (i%EXCEPT==0){
                continue;
            }
            sum += i;
            /*if (sum>=LIMIT){
                break;
            }*/
        }
     System.out.println(sum+","+(i-1));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值