既然已经学习了 Java
中的流程控制,接下来就来实际操作下,利用我们所学知识来解决实际的问题。
光学是没有用的,只有不断实践才能了解其中的真正含义。
已知世界上最高的山峰是珠穆朗玛峰,它的高度是 8844.43
米,假设有一张足够大的纸,其厚度为 0.1
毫米,那么请问我要折叠多少次,才能将这张纸折成珠穆朗玛峰的高度?
折叠次数 | 厚度 |
---|---|
1 | 0.1 |
2 | 0.2 |
3 | 0.4 |
4 | 0.8 |
…… | …… |
可以发现,纸张初始厚度为 0.1
毫米,而每次折叠之后,折叠后的纸张厚度都是未折叠前的 2
倍。而同时,我们事先是不清楚具体要叠多少次的,所以我们选择 while
来进行循环。
public class MountQomolangma {public static final double HEIGHT = 8844430;public static void main(String[] args) {// 初始厚度double init = 0.1;// 统计次数int count = 0;while (init < HEIGHT) {init *= 2;count++;}System.out.println("一共需要折叠 " + count + " 次");}
}
假设给你一个整数 x
,如果这个数是回文数,打印 true
,否则打印 false
。
回文数:指正序(从左向右)和倒序(从右向左)读都是一样的整数。
既然回文数的定义是正序和倒序读都是一样,那么我们就把这个数逆转,然后比较逆转的数和原来的数是否相等,如果相等,那么说明这个数是一个回文数,否则它就不是一个回文数。
import java.util.Scanner;public class Palindromes {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("输入一个整数");// 输入的初始值int num = in.nextInt();// 临时记录int tmp = num;// 反转后的数int reverse = 0;while (num != 0) {int x = num % 10;num /= 10;reverse = reverse * 10 + x;}System.out.println(tmp + " 是一个回文数 :" + (reverse == tmp));}
}
给定两个整数,分别是被除数和除数,然后在不使用乘法、除法和 %
运算符的情况下,求出商和余数。
平时如果要求两数的商,那么可以使用 /
,而要求两数的余数则可以使用 %
。但现在已经规定不能使用这两个运算符,那么就只想另想办法。
我们知道,其实乘除法归根结底还是加减法的简化,所以我们可以利用减法来实现求两数的商和余数。
import java.util.Scanner;public class Division {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("输入被除数:");int num1 = in.nextInt();System.out.println("输入除数:");int num2 = in.nextInt();// 商int quotient = 0;// 余数int remainder = 0;while (num1 >= num2) {num1 -= num2;quotient++;remainder = num1;}System.out.format("两数的商是: %d, 两数的余数是: %d\n", quotient, remainder);}
}
游戏规则:从任意一个数字开始报数,当要报的数字是包含 7
或 7
的倍数时,都要说:过。
打印出 1 - 100
之间的满足逢七必过规则的数据。
当一个数是 7
的倍数,那么这个数除以 7
的余数为 0
。而如果这个数包含 7
,那么这个数的个位或者十位是 7
。
public class SevenPass {public static void main(String[] args) {for (int i = 1; i <= 100; i++) {int ge = i % 10;int shi = i / 10;if (i % 7 == 0 || ge == 7 || shi == 7) {System.out.println("过");} else {System.out.println(i);}}}
}
输入一个大于等于 2
的整数,计算并返回这个数的平方根,结果只保留整数部分。
求一个数的平方根,通过遍历的方式,如果在不大于所给数的范围之内存在一个数的平方等于所给数,那么范围内的这个数就是所给数的平方根。而如果范围内存在一个数的平方刚好大于所给数,那么比这个数小 1
的数一定是所给数的平方根的整数部分,也就是我们所求的结果。
import java.util.Scanner;public class Square {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("输入一个整数");int num = scanner.nextInt();for (int i = 1; i <= num; i++) {if (num == i * i) {System.out.println(num + " 的平方根是: " + i);break;} else if (num < i * i) {System.out.println(num + " 的平方根是: " + (i - 1));break;}}}
}
从键盘输入一个正整数,判断该数是否为质数。
所谓质数,就是指这个数只能被 1
和它本身整除,要注意 1
既不是质数也不是合数。
此时通过遍历,如果 1
到它之间存在一个数能被所给数整除,那么说明说给数不是一个质数。
import java.util.Scanner;public class Prime {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("输入一个整数");int num = scanner.nextInt();boolean flag = true;for (int i = 2; i < num; i++) {if (0 == num % i) {flag = false;break;}}System.out.println(num + " 是一个质数:" + flag);}
}
系统随机给出一个 1 - 100
之间的整数,然后用程序实现才出这个数字是多少。
随机数需要用 Random
包,然后就是通过比较输入的数和生成的随机数大小,直到最后猜中。
import java.util.Random;
import java.util.Scanner;public class GuessNum {public static void main(String[] args) {Random rand = new Random();int num = rand.nextInt(100) + 1;Scanner scanner = new Scanner(System.in);while (true) {System.out.println("输入你猜的数");int tmp = scanner.nextInt();if (num == tmp) {System.out.println("你猜对了");break;} else if (num < tmp) {System.out.println("你猜大了,再猜");} else {System.out.println("你猜小了,再猜");}}}
}
以上就是关于流程控制中关于 for
、while
的知识测验了,你闯过了几关呢?