需求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("不包含");
}
}
}
运行结果: