JavaSE学习(循环结构案例1)

文章目录

  • 前言
  • 基础案例
    • 1.求1+2+3+...+100的和
    • 2.求1+3+5+...+99的和
    • 3.求1到999之间所有的素数,并且五个一组进行输出
    • 4.通过键盘输入一个整数,然后输出他的后n-1位部分
  • 总结


前言

循环结构应用广泛,这里整理了不同难度的小案例供自己复习,小伙伴们也可以看看。
这里已经开始用到了封装,其实就是把每个能实现不同功能的代码封装成方法,使用时只需要在主函数中调用方法即可,后面也会具体介绍传参的内容。


基础案例

1.求1+2+3+…+100的和

    public static void addSum1 () {
        int a=1,res1=0;
        while(a<=100){
            res1+=a;
            a++;
        }
        System.out.println("res1 = " + res1);
    }

首先看到累加的需求,就要想到用循环去做这个重复的过程。
这里用到的是while循环,这种形式的while循环可以理解成for循环的一种变形,如下所示:

int res1=0;
for(int a=1;a<=100;a++){
   res1+=a;
}

经过变形:

int a=1,res1=0;
for(;a<=100;){
  res1+=a;
  a++;
}

2.求1+3+5+…+99的和

    public static void addSum2 () {
        int b = 1, res2 = 0;
        do {
            res2 += b;
            b += 2;
        } while (b <= 100 && b % 2 == 1);
        System.out.println("res2 = " + res2);
    }

这里的循环条件中用到了逻辑运算符与&&和算术运算符取余%,b%2==1就是b除以2余1,以此来表示奇数。
相应的,如果表示偶数就是 b % 2 == 0


3.求1到999之间所有的素数,并且五个一组进行输出

    public static void isSuShu1(){
        int n = 0;
        for (int i = 1; i < 1000; i++) {
            boolean tag = true;
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    tag = false;
                    break;
                }
            }
            if (tag) {
                System.out.print(i + " ");
                n++;
                if (n % 5 == 0) {
                    System.out.println();
                }
            }
        }
    }

1.这里有一个嵌套循环:外面的for循环作用是遍历1-999的每一个数字
2.里面的for循环与if是平行关系:for循环用于判断i是否是素数,if表示当其为素数时输出i;
3.再看五个一组输出的需求:又加上了一个选择结构,当n为5的倍数时换行。


4.通过键盘输入一个整数,然后输出他的后n-1位部分

这个案例我是自己先写,再看老师的思路,我觉得老师的方法更优,但是又想保留自己的想法,就把两个都发出来了~

先给出我的方法:

    public static void getCalName1(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int i = scanner.nextInt();
        int d = 10;
            while (i / d != 0) {
                d *= 10;
            }
            System.out.println("该数字的后n-1位数为:" + i % (d /10));
    }

这个案例是要输出后n-1位数字,那首先需要知道该数字一共有几位数
这里循环意思是让i去不断地除以10,直到i为零,当d=10时,i是一位数字;当d为100时,i是两位数字…以此类推;
最后只需要输出i % (d /10)用以保留后n-1位即可。
这样看来,我的代码确实感觉比较凌乱、不清晰

下面是老师的方法:

    public static void getCalName2(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数字:");
        int num = scanner.nextInt();
        int pos=num,n=0,d=1;
//        拆数法获取位数
        while(num!=0){
            num=num/10;
            n++;
        }
        for (int i = 1; i < n; i++) {//比如获取到的是四位数,就是给他%10的3次方
            d*=10;
        }
        int res=pos%d;
        System.out.println("该数字的后n-1位数为:" + res);
    }

老师的方法就非常清晰:
1.定义pos、n、d:pos用来保存num的值,因为后面会对num进行改变;n相当于一个计数器,表示num的位数,当num!=0时,每进行一次循环,n++;d是10的n-1次方;
2.用while循环去获取num的位数
3.用for循环实现10的n-1次方
4.最后:num的后n-1位就为res=pos%d


总结

还是那句话,代码能自己敲一遍、梳理一遍会有更加深刻的理解和印象哦~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值