java基础语法4(数组练习题上)

需求1: 

用户输入年龄,判断他是哪个年龄段
        0-9 儿童
        10-19 少年
        20-29 青少年
        30-39 青年
        40-49 壮年
        50-59 中年
        60-69 中老年
        70-79 老年
        80-89 老老年
        90-99 老老老年

解答:

1.刚看到这个题,第一反应是用几个if语句,当年龄符合范围,便输出该范围对应的年龄段称号;

代码实现:

package 数组.练习;

import java.util.Scanner;

public class demo7 {
    public static void main(String[] args) {
        System.out.println("请输入用户年龄");
        Scanner sc = new Scanner(System.in);
        int age =sc.nextInt();
        if (age <0|age>99) {
            System.out.println("系统无法检测该年龄段");
        }
        if (age <=9) {
            System.out.println("该用户属于儿童");
        }
        else if (age <=19) {
            System.out.println("该用户属于少年");
        }
        else if (age <=18) {
            System.out.println("该用户属于青少年");
        }
        else if (age <=35) {
            System.out.println("该用户属于青年");
        }
        else if (age <=19) {
            System.out.println("该用户属于壮年");
        }
        else if (age <=55) {
            System.out.println("该用户属于中年");
        }
        else if (age <=19) {
            System.out.println("该用户属于中老年");
        }
        else if (age <=19) {
            System.out.println("该用户属于老年");
        }
        else if (age <=19) {
            System.out.println("该用户属于老老年");
        }
        else  {
            System.out.println("该用户属于老老老年");
        }

    }

}

运行结果:

 但显然,这样处理存在缺陷。这个题目只有10个范围,若果将范围扩大到20个、30个、40个......要用这种方法的话只能再增加if语句,代码太重复了。

2.通过观察题目不难发现,如果给每个数据除以10,通过十位数字也可以区别各个范围。而且各个数据都是按照从小到大的顺序排,结合数组的知识得到了新的解题方法。

代码实现:


class demo7_method2 {
    public static void main(String[] args) {
        System.out.println("请输入用户年龄");
        Scanner sc = new Scanner(System.in);
        int age = sc.nextInt() ;
        if (age < 0 | age > 99) {
            System.out.println("输入年龄非系统识别范围");
        } else {
            int b=age/10;
            String[] a = {"儿童", "少年", "青少年", "青年", "壮年", "中年", "中老年", "老年", "老老年", "老老老年"};
            System.out.println(a[b]);
        }
    }
}

运行结果:

需求2:

输出2--100之间的质数(只能被1和本身整除的,再没有其他因数的数)

解答:

质数的定义:只能被1和本身整除的称为质数

1.通过质数定义可以想到解决方法:使用俩层嵌套,第一层自增当做被除数,第二层依次提取除1和第一层数之外的数当做除数,将他们做除法运算,若是可以整除就不记录,不能整除就记录第一层的数,最后再输出,这就得到了2-100以内的质数。

代码实现:

public class Demo1 {
    public static void main(String[] args) {
        System.out.println("方法一:");
        method1();
    }
private static void method1() {
        for (int i = 2; i < 101; i++) {
            boolean flag = true;
            for (int j = 2; j < i; j++) {
//判断是否存在j能整除i,若存在,则更改flag的值并跳出循环
                if (i % j == 0) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                System.out.print(i + " ");
            }
        }
        System.out.println("\n"+"-----------------");
    }
}

运行结果:

2.通过进一步思考,发现要判断除了1和本身可以整除,不一定要把小于他的数都判断一遍,可以只判断判断到这个数的一半,这样也可以得到结果。之所以这样做是因为再没有比2/i大的i的因数了,因此只需要判断到2/i就可以停了。

代码实现:

public class Demo1 {
    public static void main(String[] args) {
       
        System.out.println("方法二:");
        method2();

    }
    private static void method2(){
        for (int i = 2; i < 101; i++) {
            boolean flag = true;
            for (int j = 2; j <=(i/2); j++) {
                if (i % j == 0) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                System.out.print(i + " ");
            }
        }
        System.out.println("\n"+"-----------------");
    }
}

 运行结果:

 

3.通过对结果分析发现,得出的数都是奇数,没有偶数,因此,为了优化方法,可以在判断的时候直接跳过偶数,直接对偶数进行判断。

代码实现:

 public class Demo1 {
    public static void main(String[] args) {
      
        System.out.println("方法三:");
        method3();

    }
    private static void method3(){
        System.out.print("2 ");
        for (int i = 3; i < 101; i+=2) {
            boolean flag = true;
            for (int j = 3; j <=(i/2); j+=2) {
                if (i % j == 0) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                System.out.print(i + " ");
            }
        }
        System.out.println("\n"+"-----------------");
    }
}

运行结果:

4.java中有个 Math.sqrt(i)方法,这个是得出i的正平方根。其实,我们只需要判断到Math.sqrt(i)就可以了,后面的就不需要判断了。拿36举例子,循环到6就已经不需要判断后面的数了。有人可能会质疑:9*4=36,还应该判断9吧。但其实,我们在判断9之前,已经对4做过判断了,也就不需要对9进行判断了。也可以理解为6就是要做判断的极限了,也就是Math.sqrt(i)。

代码实现:

public class Demo1 {
    public static void main(String[] args) {
        System.out.println("方法四:");
        method4();
    }
    private static void method4(){
        System.out.print("2 ");
        for (int i = 3; i < 101; i+=2) {
            boolean flag = true;
            for (int j = 3; j <=Math.sqrt(i); j+=2) {
                if (i % j == 0) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                System.out.print(i + " ");
            }
        }
        System.out.println("\n"+"-----------------");
    }
}

运行结果:

需求3:

有一个数组:int [] arr = {8,4,2,1,23,344,12}
猜数游戏:从键盘中任意输入一个数据,判断数组中是否包含此数

解答:

1.看到这个题,首先想到的是用switch语句,用switch语句一个个判断,如果和数组中的数值一致,那就输出true,不一样就输出false。

代码实现:


public class demo3 {
    public static void main(String[] args) {
        int[] a={2,13,4,53,55,8};
        Scanner scanner= new Scanner(System.in);
        System.out.println("请输入一个数");
        int c= scanner.nextInt();
        flag1:
        for (int i = 0; i < a.length; i++) {
            switch (c){
                case 2:
                    System.out.println("true") ;break flag1;
                case 13: System.out.println("true");break flag1;
                case  4:System.out.println("true"); break flag1;
                case 53:System.out.println("true");break flag1;
                case 55:System.out.println("true"); break flag1;
                case 8:System.out.println("true");break flag1;
                default:System.out.println("false");
                    break flag1;
            }
        }
    }
}

运行结果:

 

2.这个方法太“笨”了,数据少的时候可以用用,但是数据量大的时候代码量太大了。结合数组的知识,可以使用一个for语句,通过索引,直接拿数组的数和给到的数进行比较,这样可以省去大量代码。

代码实现:

class method2{
    public static void main(String[] args) {
        int [] a={1,2,3,5,7,34,353};
        Scanner sc= new Scanner(System.in);
        System.out.println("请输入一个数");
        int b= sc.nextInt();
        boolean x=false;
        for (int i = 0; i <a.length ; i++) {
            if (b==a[i]) {
                x=true;
            }
        }
        if(x){
            System.out.println("包含");
        }else {
            System.out.println("不包含");
        }
    }
}

运行结果:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值