Java练习题——流程控制语句
前言
本文一共有5题,考察的是Java中循环语句的知识点,其中还包含了力扣(LeetCode)题库中的题目,难度较大一点,学有余力的可以挑战一下。
1.回文数
给你一个整数x,如果x是一个回文数,打印true,否则,返回false。(注:回文数是指正序和倒序读都是一样的整数。列如,121是回文数,1231不是)
此题为力扣算法题库里的一道题,其解题思路如下:
要将数字倒过来输出再与原数字相比,如果二者相同则为true,如果二者不相同则为false
- 首先要接收一个用户输入的整数,并判断是否为0,如果是0就不用通过循环将数字顺序颠倒再赋值给一个变量,而是直接比较。
- 其次要将数字倒序输出则要先将原数字中每个数字从右向左依次取出再从左向右输入。
将原数字从右向左依次取出
第一步,通过除以10再取余数可以输出数字的个位数;
第二步,用原数字除以10可以将原来的个位数字去掉(n位数变为n-1位)因为Java中两个整数相除结果自动保存整数位
第三步,在此基础上再除以10后取余可以得到新的数字的个位数,即取出倒数第二位数字
第四步,如此循环直至将第一位数字取出,实现依次倒序将原数字每个数字取出
将取出的数字从左向右放入
第一步,将取出的个位数字赋值给一个新的变量
第二步,将取出的个位数字向前移动一个空位(将原来的数字✖10),将原来的个位留空给第二个取出的数字
第三步,将取出的数字组成一个数,列如一位数(取出的个位数)2,两位数23=210+3,一个三位数234=2310+4,一个四位数2345=234*10+5;所以要提取出来将数字再加上已经组合起来变成数乘以10,直到取出的数字全部用完 - 判断新数字是否与原数字相同
- 打印输出结果
public class 回文数 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入数字:");
int x = in.nextInt();
int temp = x;//将x原先的值赋值给一个不参与循环的变量,用于最后比较时
int num = 0;
while (x != 0){
int ge = x % 10;//依次取出x中每个数
x = x / 10;
num = num * 10 + ge;//将取出的数字从左往右放
}
boolean result = num == temp;
if(result){
System.out.println(temp + "是回文数");
}
else{
System.out.println(temp + "不是回文数");
}
}
}
2.计算平方根
输入一个大于等于2的整数x,计算并返回x的平方根,结果只保留整数部分,小数部分将被舍去
此题也是力扣算法题库里的一道题,其解题思路如下:
- 接收一个用户输入的整数
- 判断是否大于等于2,如果是则继续,如果不是则让用户重新输入数字
- 定义一个变量,当变量的值小于输入的数时,依次查找是否满足条件
- 因为只需要输出整数部分,所以只要知道这个数是在哪两个平方数之间即可。如:2的平方小于5小于3的平方,所以5的平方根的整数部分就是2
- 打印输出符合条件的数
参考代码如下
import java.util.Scanner;
public class 求平方根 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int i = 1;
System.out.println("请输入一个大于等于2的数字:");
double x = in.nextDouble();
if(x < 2){
System.out.println("输入数字不合法,请重新输入");
}
else{
while (i < x){
if((i * i <= x) && ((i+1) * (i+1)) > x) {
System.out.println(x+"的平方根的整数部分是:" + i);
break;
}
i++;
}
}
}
}
另一种解题思路:
- 接收一个用户输入的整数
- 定义一个变量并赋值,从1开始判断,并将其平方与原数字相比较,若小于则将该数加1后再平方,再比较,如此重复
- 判断该变量的平方是比原数大还是相等,如果大,则该数的前一个数字就是输入整数的平方根的整数部分;如果相等,则该数就是输入数字发平方根的整数部分
- 打印输出该数
参考代码如下
import java.util.Scanner;
public class 求平方根2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一个整数");
int num = in.nextInt();
for(int i = 1 ; i <=num ; i++){
if(i * i == num){
System.out.println(i + "就是" + num + "的平方根");
break;
}
else if(i * i > num){
System.out.println(i-1 + "就是" + num + "的平方根");
break;
}
}
}
}
3.逢7过
在1到100之间,碰到数字含有7的就输出过,其余的按顺序输出
本题思路较简单:
按序输出数字,当碰到一位数为7,或者两位数的十位数为7,或者个位数为7时打印输出“过”
- 按序打印输出每一个变量需要通过循环语句实现:当变量小于100时打印输出此时变量的值后变量值加1
- 当一位数为7时打印过,不执行输出此时变量的值的操作
- 当一个两位数的十位为7时打印过,不执行输出此时变量的值的操作
- 当一个两位数的个位为7时打印过,不执行输出此时变量的值的操作
参考代码如下
public class 逢7过 {
public static void main(String[] args) {
int i ;
for(i = 1 ; i <=100 ; i++){
if((i % 10 == 7) || (i / 10 % 10 == 7) || (i == 7)){
System.out.println("过");
continue;
}
System.out.println(i);
}
}
}
4.输入任意一个整数,判断它是否为质数
一种是代码较多但是便于理解的方法,其解题思路如下:
质数是指除了1和自身没有别的公约数的数,即素数只能整除2个数,所以只需要计算能整除的个数是否为2就能判断该数是否为素数
- 接收一个用户输入的整数
- 判断输入是否合法,如果是则继续,如果不是则输出“输入不合法”
- 因为1不是质数,所以我们从2开始判断,如果用户输入的是1,则直接输出“不是质数”即可
- 定义一个变量作为计数器
- 定义一个变量 i ,并当 i 小于我们输入的数时,看输入的数是否能整除,如果可以就让计数器的值加1,如果不能就判断下一个
- 在执行完循环后判断计数器内的值是否为2,如果是则为素数,如果不是则不是素数
- 打印输出判断结果
import java.util.Scanner;
public class 求质数 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入正整数");
int x = in.nextInt();
int count = 0, i = 1, num = 0;
if (x >= 2) {
for (i = 1; i <= x; i++) {
if (x % i != 0) {
continue;
}
count++;
}
if (count == 2) {
System.out.println(x + "是质数");
}
else {
System.out.println(x + "不是质数");
}
}
else if (x == 1) {
System.out.println(x + "不是质数");
}
else {
System.out.println("输入数字不合法,请重新输入");
}
}
}
另一种解题思路
定义一个变量表示标记,先默认输入的数字是质数,如果经过判断以后的确是的话,则打印输出“是质数”,如果不是的话,就打印输出“不是质数”。使用这种方法可以减少代码量,使得代码简洁明了,一般我们会使用“flag”作为变量名进行判断。
循环体内的思路如下:
- 从2开始,一直到输入数字-1的值为范围,看有无整数可以被该数字整除
- 如果有,将flag的值改变为false并退出循环,如果没有,则不改变flag的值
- 判断flag的值,如果是true,则为质数,如果是false则不是质数
import java.util.Scanner;
public class 求质数2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入正整数");
boolean flag = true;
int num = in.nextInt();
for (int i = 2; i < num; i++) {
if (num % i == 0) {
flag = false;
break;
}
}
if (flag) {
System.out.println(num + "是一个质数");
} else {
System.out.println(num + "不是一个质数");
}
}
}
5.猜数字小游戏
随机获取一个1到100的数字,并输入猜测的数字,大了或者小了就输出相应语句,直到猜测准确为止
其核心解题思路如下:
将输入数字与随机生成的数字进行判断,并输出二者关系(大了/小了)后继续判断,直到猜准确为止
- 获取一个随机数,要注意的是 r.nextInt(bound:100)指的是0-99,故要加1,才能保证获取的随机数范围是1-100
- 获得用户输入的数字
- 判断输入数字和随机数的关系,并打印输出
- 由于不知道要判断多少次,所以要写一个无限循环的语句,并在猜中时退出循环
- 写出循环语句与break语句
import java.util.Random;
import java.util.Scanner;
public class 猜数字 {
public static void main(String[] args) {
Random r = new Random();
int number = r.nextInt(bound:100)+1;
Scanner in = new Scanner(System.in);
while (true){
System.out.println("请输入你猜的数字");
int guessNumber = in.nextInt();
if(guessNumber > number){
System.out.println("大了");
}
else if(guessNumber < number){
System.out.println("小了");
}
else{
System.out.println("猜中了");
break;
}
}
}
}
结语
本文主要是一些流程控制语句的综合题型,所给出的代码仅供参考,若有更加简洁的思路欢迎评论交流。