Java从入门到精通-流程控制(二)

简介: Java从入门到精通-流程控制(二)

习题讲解:

上次我们给大家留了一些流程控制的问题,这次给大家分析讲解一下:


条件语句练习:

1.编写Java程序,用于接受用户输入的数字,然后判断它是偶数还是奇数,并输出相应的消息。

import java.util.Scanner;
public class OddEvenCheck {
    public static void main(String[] args) {
        // 创建一个Scanner对象来接受用户输入
        Scanner scanner = new Scanner(System.in);
        // 提示用户输入一个整数
        System.out.print("请输入一个整数: ");
        // 从用户输入中读取整数
        int number = scanner.nextInt();
        // 使用条件语句判断数字是偶数还是奇数
        if (number % 2 == 0) {
            System.out.println(number + " 是偶数。");
        } else {
            System.out.println(number + " 是奇数。");
        }
        // 关闭Scanner对象
        scanner.close();
    }
}

分析讲解:

  1. 我们首先导入java.util.Scanner类,以便能够从用户输入中读取数据
  2. 创建一个Scanner对象,这将帮助我们接受用户的输入。
  3. 使用System.out.print语句提示用户输入一个整数。
  4. 使用scanner.nextInt()从用户的输入中读取整数并将其存储在number变量中。
  5. 使用条件语句if来检查number是否是偶数。如果number除以2的余数等于0,那么它是偶数,否则是奇数。
  6. 根据判断结果,程序将输出相应的消息,告诉用户输入的数字是偶数还是奇数。
  7. 最后,我们使用scanner.close()来关闭Scanner对象,以释放资源。

例题总结:

这个程序演示了如何使用条件语句来判断用户输入的数字是偶数还是奇数。它首先接受用户输入,然后使用条件表达式检查输入的数字是否可以被2整除。如果可以,它被认为是偶数,否则被认为是奇数,并输出相应的消息。这个示例强调了Java中的条件语句的使用,是编程中的基础之一。

2.创建一个简单的登陆系统,要求用户输入用户名和密码。如果用户名是 “admin” 并且密码是 “password”,则显示欢迎消息,否则显示错误消息。

import java.util.Scanner;
public class SimpleLoginSystem {
    public static void main(String[] args) {
        // 创建一个Scanner对象来接受用户输入
        Scanner scanner = new Scanner(System.in);
        // 提示用户输入用户名
        System.out.print("请输入用户名: ");
        String username = scanner.nextLine();
        // 提示用户输入密码
        System.out.print("请输入密码: ");
        String password = scanner.nextLine();
        // 验证用户名和密码
        if (username.equals("admin") && password.equals("password")) {
            System.out.println("欢迎 " + username + " 进入系统!");
        } else {
            System.out.println("用户名或密码错误,请重试。");
        }
        // 关闭Scanner对象
        scanner.close();
    }
}

分析讲解:

  1. 我们首先导入java.util.Scanner类,以便能够从用户输入中读取数据。
  2. 创建一个Scanner对象,这将帮助我们接受用户的输入。
  3. 使用System.out.print语句提示用户输入用户名。
  4. 使用scanner.nextLine()从用户的输入中读取用户名并将其存储在username变量中。
  5. 提示用户输入密码。
  6. 使用scanner.nextLine()从用户的输入中读取密码并将其存储在password变量中。
  7. 使用条件语句if来验证用户名和密码是否匹配。如果用户名是"admin"且密码是"password",则显示欢迎消息;否则,显示错误消息。
  8. 最后,我们使用scanner.close()来关闭Scanner对象,以释放资源。

例题总结:

这个程序演示了如何创建一个简单的登录系统,要求用户输入用户名和密码,并验证这些信息。它使用条件语句来检查用户名和密码是否匹配,如果匹配则显示欢迎消息,否则显示错误消息。这个示例强调了Java中的条件语句和用户输入的处理。在实际应用中,安全性需要更复杂的处理,但这个示例提供了一个基本的框架。

3.编写一个程序,接受用户输入的年份,然后判断该年份是否为闰年,并输出相应的消息。闰年条件:能被4整除但不能被100整除,或者能被400整除。

import java.util.Scanner;
public class LeapYearCheck {
    public static void main(String[] args) {
        // 创建一个Scanner对象来接受用户输入
        Scanner scanner = new Scanner(System.in);
        // 提示用户输入一个年份
        System.out.print("请输入一个年份: ");
        int year = scanner.nextInt();
        // 使用条件语句判断是否为闰年
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
            System.out.println(year + " 是闰年。");
        } else {
            System.out.println(year + " 不是闰年。");
        }
        // 关闭Scanner对象
        scanner.close();
    }
}

分析讲解:

  1. 我们首先导入java.util.Scanner类,以便能够从用户输入中读取数据。
  2. 创建一个Scanner对象,这将帮助我们接受用户的输入。
  3. 使用System.out.print语句提示用户输入一个年份。
  4. 使用scanner.nextInt()从用户的输入中读取年份并将其存储在year变量中。
  5. 使用条件语句if来判断年份是否为闰年。根据闰年的条件,我们检查两个条件:年份能够被4整除但不能被100整除,或者能够被400整除。如果两个条件中的任何一个满足,就认为是闰年。
  6. 根据判断结果,程序将输出相应的消息,告诉用户输入的年份是闰年还是不是闰年。
  7. 最后,我们使用scanner.close()来关闭Scanner对象,以释放资源。

例题总结:

这个程序演示了如何接受用户输入的年份,并使用条件语句来判断是否为闰年。它根据闰年的定义,检查了两个条件,以确定年份的闰年状态,并输出相应的消息。这个示例强调了Java中的条件语句的使用,是编程中的基础之一。

循环语句练习:

4.使用 for 循环打印出1到100的所有奇数。

public class PrintOddNumbers {
    public static void main(String[] args) {
        // 使用for循环遍历1到100的所有数字
        for (int i = 1; i <= 100; i++) {
            // 检查是否是奇数
            if (i % 2 != 0) {
                // 如果是奇数,就打印出来
                System.out.println(i);
            }
        }
    }
}

分析讲解:

  1. 我们使用 for 循环来遍历从1到100的所有数字,将 i 初始化为1,然后在每次迭代后增加1。
  2. 在循环的每一次迭代中,我们使用条件语句 if 来检查当前的数字 i 是否是奇数。
  3. 如果 i 不能被2整除(即 i % 2 != 0 为真),则它是奇数。
  4. 如果 i 是奇数,我们就使用 System.out.println(i); 打印出它。

例题总结:

这个程序将循环遍历1到100的数字,并只打印出奇数,即不被2整除的数字。这是一种常见的用法,用于筛选和处理特定类型的数字。

5.使用 while 循环找出一个正整数的所有因子

import java.util.Scanner;
public class FactorsOfNumber {
    public static void main(String[] args) {
        // 创建一个Scanner对象来接受用户输入
        Scanner scanner = new Scanner(System.in);
        // 提示用户输入一个正整数
        System.out.print("请输入一个正整数: ");
        int number = scanner.nextInt();
        // 初始化一个除数
        int divisor = 1;
        // 使用while循环找出所有因子
        System.out.print(number + " 的因子包括: ");
        while (divisor <= number) {
            if (number % divisor == 0) {
                System.out.print(divisor + " ");
            }
            divisor++;
        }
        // 关闭Scanner对象
        scanner.close();
    }
}

分析讲解:

  1. 我们首先导入java.util.Scanner类,以便能够从用户输入中读取数据。
  2. 创建一个Scanner对象,这将帮助我们接受用户的输入。
  3. 使用System.out.print语句提示用户输入一个正整数。
  4. 使用scanner.nextInt()从用户的输入中读取正整数并将其存储在number变量中。
  5. 初始化一个除数 divisor,开始为1。
  6. 使用 while 循环来查找 number 的因子。在每次迭代中,我们检查是否 number 能够被 divisor 整除。如果能够整除,就说明 divisor 是一个因子,并将其打印出来。
  7. 在每次迭代后,我们增加 divisor 的值,继续查找下一个因子。
  8. 最后,我们使用scanner.close()来关闭Scanner对象,以释放资源。

例题总结:

这个程序将找出用户输入的正整数的所有因子,并将它们打印出来。这是一种查找因子的常见方法,可以用于数学和算法问题中。

6.使用 do...while 循环实现一个猜数字游戏,程序随机生成一个数字,然后提示用户猜数字,直到用户猜中为止

import java.util.Scanner;
import java.util.Random;
public class GuessNumberGame {
    public static void main(String[] args) {
        // 创建一个Scanner对象来接受用户输入
        Scanner scanner = new Scanner(System.in);
        // 创建一个Random对象来生成随机数字
        Random random = new Random();
        // 生成随机数字(1到100之间)
        int target = random.nextInt(100) + 1;
        int attempts = 0; // 记录尝试次数
        int guess; // 用户猜的数字
        do {
            System.out.print("猜一个1到100之间的数字: ");
            guess = scanner.nextInt();
            attempts++;
            if (guess < target) {
                System.out.println("太小了,请再试一次。");
            } else if (guess > target) {
                System.out.println("太大了,请再试一次。");
            }
        } while (guess != target);
        System.out.println("恭喜,你猜对了!总共尝试了 " + attempts + " 次。");
        // 关闭Scanner对象
        scanner.close();
    }
}

分析讲解:

  1. 我们首先导入java.util.Scanner类和java.util.Random类,以便能够从用户输入中读取数据和生成随机数字。
  2. 创建一个Scanner对象,这将帮助我们接受用户的输入。
  3. 创建一个Random对象,用于生成随机的目标数字(在1到100之间)。
  4. 使用 do...while 循环来实现猜数字游戏,游戏会一直进行,直到用户猜中为止。
  5. 在每轮循环中,程序会提示用户输入猜测的数字,并将其存储在guess变量中。同时,attempts变量记录了用户的尝试次数。
  6. 程序会检查用户的猜测是否正确。如果猜测小于目标数字,就显示"太小了,请再试一次。“;如果猜测大于目标数字,就显示"太大了,请再试一次。”。
  7. 当用户猜中数字(guess == target)时,循环结束,并输出恭喜消息,显示用户猜中了,并告诉他们尝试的次数。
  8. 最后,我们使用scanner.close()来关闭Scanner对象,以释放资源。

例题总结:

这个程序实现了一个简单的猜数字游戏,用户可以尝试多次猜测,直到猜中目标数字为止。这种游戏可以用来练习do...while循环和条件语句的使用。

循环控制语句练习:

7.使用 break 语句改进上面的猜数字游戏,如果用户连续猜错5次,就自动结束游戏。

import java.util.Scanner;
import java.util.Random;
public class ImprovedGuessNumberGame {
    public static void main(String[] args) {
        // 创建一个Scanner对象来接受用户输入
        Scanner scanner = new Scanner(System.in);
        // 创建一个Random对象来生成随机数字
        Random random = new Random();
        // 生成随机数字(1到100之间)
        int target = random.nextInt(100) + 1;
        int attempts = 0; // 记录尝试次数
        int guess; // 用户猜的数字
        while (true) {
            System.out.print("猜一个1到100之间的数字: ");
            guess = scanner.nextInt();
            attempts++;
            if (guess < target) {
                System.out.println("太小了,请再试一次。");
            } else if (guess > target) {
                System.out.println("太大了,请再试一次。");
            } else {
                System.out.println("恭喜,你猜对了!总共尝试了 " + attempts + " 次。");
                break; // 用户猜对,结束游戏
            }
            if (attempts >= 5) {
                System.out.println("你已经尝试了5次,游戏结束。");
                break; // 用户连续猜错5次,结束游戏
            }
        }
        // 关闭Scanner对象
        scanner.close();
    }
}

分析讲解:

  1. 这个程序与前一个猜数字游戏程序类似,但是使用了一个 while (true) 循环,以便在用户连续猜错5次后自动结束游戏。
  2. 在每轮循环中,程序会检查用户的猜测是否正确。如果猜测小于目标数字,就显示"太小了,请再试一次。“;如果猜测大于目标数字,就显示"太大了,请再试一次。”。
  3. 如果用户猜中数字(guess == target),程序会输出恭喜消息,并显示用户尝试的次数,然后使用 break 语句结束游戏循环。
  4. 如果用户连续猜错5次(attempts >= 5),程序会输出消息并使用 break 语句结束游戏循环,结束游戏。

例题总结:

这个程序允许用户猜数字,并在用户连续猜错5次后自动结束游戏。这种改进可以增加游戏的交互性和挑战性。

8.使用 continue 语句编写一个程序,打印出1到100的所有数字,但跳过所有包含数字 7 的数字,例如,跳过 7, 17, 27…

public class PrintNumbersSkipSeven {
    public static void main(String[] args) {
        // 使用for循环遍历1到100的所有数字
        for (int i = 1; i <= 100; i++) {
            // 检查是否包含数字7
            if (containsSeven(i)) {
                continue; // 跳过包含数字7的数字
            }
            // 打印当前数字
            System.out.println(i);
        }
    }
    // 辅助函数:检查一个数字是否包含数字7
    private static boolean containsSeven(int number) {
        while (number > 0) {
            int digit = number % 10;
            if (digit == 7) {
                return true; // 包含数字7
            }
            number /= 10;
        }
        return false; // 不包含数字7
    }
}

分析讲解:

  1. 这个程序使用 for 循环来遍历1到100的所有数字,将 i 初始化为1,然后在每次迭代后增加1。
  2. 在每轮循环中,程序使用 containsSeven(i) 函数来检查当前的数字 i 是否包含数字7。
  3. containsSeven 函数用于检查一个数字是否包含数字7。它通过反复取数字的个位数,然后将数字除以10来检查每一位是否为7。
  4. 如果 containsSeven(i) 返回 true,则使用 continue 语句跳过包含数字7的数字,继续下一个数字。
  5. 如果不包含数字7,就使用 System.out.println(i); 打印当前数字。

例题总结:

这个程序将打印出1到100的所有数字,但会跳过包含数字7的数字。这是一种在特定条件下跳过某些迭代的常见做法。

9.创建一个简单的菜单程序,让用户选择不同的选项(例如,1. 添加新项目,2. 查看项目,3. 退出程序)。使用 switch 语句处理用户的选择

import java.util.Scanner;
public class SimpleMenu {
    public static void main(String[] args) {
        // 创建一个Scanner对象来接受用户输入
        Scanner scanner = new Scanner(System.in);
        int choice;
        do {
            // 显示菜单选项
            System.out.println("菜单:");
            System.out.println("1. 添加新项目");
            System.out.println("2. 查看项目");
            System.out.println("3. 退出程序");
            System.out.print("请选择选项(1/2/3): ");
            // 读取用户选择
            choice = scanner.nextInt();
            // 使用switch语句处理用户选择
            switch (choice) {
                case 1:
                    System.out.println("选项1:添加新项目");
                    // 在这里添加处理添加新项目的代码
                    break;
                case 2:
                    System.out.println("选项2:查看项目");
                    // 在这里添加处理查看项目的代码
                    break;
                case 3:
                    System.out.println("选项3:退出程序");
                    break;
                default:
                    System.out.println("无效的选项,请重新选择。");
            }
        } while (choice != 3); // 当用户选择退出时结束循环
        // 关闭Scanner对象
        scanner.close();
    }
}

分析讲解:

  1. 我们首先导入java.util.Scanner类,以便能够从用户输入中读取数据。
  2. 创建一个Scanner对象,这将帮助我们接受用户的输入。
  3. 使用 do...while 循环来实现菜单程序,循环将一直运行,直到用户选择退出。
  4. 在每轮循环中,程序显示菜单选项,提示用户选择。
  5. 使用scanner.nextInt()读取用户的选择并存储在choice变量中。
  6. 使用switch语句处理用户的选择。根据不同的选项,你可以在相应的case分支中添加处理代码。
  7. 如果用户选择退出(choice == 3),循环结束,程序退出。

例题总结:

这个程序演示了如何创建一个简单的菜单系统,允许用户选择不同的选项,并使用`switch`语句来处理这些选项。你可以根据需要扩展每个选项的功能。

相关文章
|
1月前
|
安全 Java 程序员
《从头开始学java,一天一个知识点》之:控制流程:if-else条件语句实战
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列为你打造Java「速效救心丸」!每天1分钟,地铁通勤、午休间隙即可完成学习。直击高频考点和实际开发中的「坑位」,拒绝冗长概念,每篇都有可运行的代码示例。明日预告:《for与while循环的使用场景》。 ---
63 19
|
9天前
|
存储 安全 Java
【Java并发】【原子类】适合初学体质的原子类入门
什么是CAS? 说到原子类,首先就要说到CAS: CAS(Compare and Swap) 是一种无锁的原子操作,用于实现多线程环境下的安全数据更新。 CAS(Compare and Swap) 的
42 15
【Java并发】【原子类】适合初学体质的原子类入门
|
6天前
|
缓存 安全 Java
【Java并发】【ConcurrentHashMap】适合初学体质的ConcurrentHashMap入门
ConcurrentHashMap是Java中线程安全的哈希表实现,支持高并发读写操作。相比Hashtable,它通过分段锁(JDK1.7)或CAS+synchronized(JDK1.8)实现更细粒度锁控制,提升性能与安全性。本文详细介绍其构造方法、添加/获取/删除元素等常用操作,并对比JDK1.7和1.8的区别,帮助开发者深入理解与使用ConcurrentHashMap。欢迎关注,了解更多!
38 3
【Java并发】【ConcurrentHashMap】适合初学体质的ConcurrentHashMap入门
|
9天前
|
Java
【源码】【Java并发】【LinkedBlockingQueue】适合中学体质的LinkedBlockingQueue入门
前言 有了前文对简单实用的学习 【Java并发】【LinkedBlockingQueue】适合初学体质的LinkedBlockingQueue入门 聪明的你,一定会想知道更多。哈哈哈哈哈,下面主播就...
41 6
【源码】【Java并发】【LinkedBlockingQueue】适合中学体质的LinkedBlockingQueue入门
|
10天前
|
安全 Java
【Java并发】【ArrayBlockingQueue】适合初学体质的ArrayBlockingQueue入门
什么是ArrayBlockingQueue ArrayBlockingQueue是 Java 并发编程中一个基于数组实现的有界阻塞队列,属于 java.util.concurrent 包,实现了 Bl...
46 6
【Java并发】【ArrayBlockingQueue】适合初学体质的ArrayBlockingQueue入门
|
2月前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
204 60
【Java并发】【线程池】带你从0-1入门线程池
|
17天前
|
监控 Java API
【Java并发】【ReentrantLock】适合初学体质的ReentrantLock入门
前言 什么是ReentrantLock? ReentrantLock 是 Java 并发包 (java.util.concurrent.locks) 中的一个类,它实现了 Lock 接口,提供了与
61 10
【Java并发】【ReentrantLock】适合初学体质的ReentrantLock入门
|
9天前
|
安全 Java
【Java并发】【LinkedBlockingQueue】适合初学体质的LinkedBlockingQueue入门
前言 你是否在线程池工具类里看到过它的身影? 你是否会好奇LinkedBlockingQueue是啥呢? 没有关系,小手手点上关注,跟上主播的节奏。 什么是LinkedBlockingQueue? ...
38 1
【Java并发】【LinkedBlockingQueue】适合初学体质的LinkedBlockingQueue入门
|
1月前
|
设计模式 存储 安全
【Java并发】【AQS】适合初学者体质的AQS入门
AQS这是灰常重要的哈,很多JUC下的框架的核心,那都是我们的AQS,所以这里,我们直接开始先研究AQS。 那说到研究AQS,那我们应该,使用开始说起🤓 入门 什么是AQS? AQS(Abst
68 8
【Java并发】【AQS】适合初学者体质的AQS入门
|
1月前
|
缓存 安全 Java
【Java并发】【synchronized】适合初学者体质入门的synchronized
欢迎来到我的Java线程同步入门指南!我不是外包员工,梦想是写高端CRUD。2025年我正在沉淀中,博客更新速度加快,欢迎点赞、收藏、关注。 本文介绍Java中的`synchronized`关键字,适合初学者。`synchronized`用于确保多个线程访问共享资源时不会发生冲突,避免竞态条件、保证内存可见性、防止原子性破坏及协调多线程有序访问。
64 8
【Java并发】【synchronized】适合初学者体质入门的synchronized
下一篇
oss创建bucket