任务描述

本关任务:输出所有水仙花数。 水仙花数特征:

  • 该值处于 100(包括)到 999(包括)之间;
  • 其个位数的三次幂,十位数的三次幂,百位数的三次幂的和等于这个数本身。

输出格式:xx是一个水仙花数。

相关知识

当我们想要对同样的操作执行多次,就需要使用到循环结构,在 Java 中循环结构主要分为三种:

  • while 循环;
  • do...while 循环;
  • for 循环。

之前我们已经学习了前面两种循环,今天我们来学习最后一种最重要的循环结构 —— for 循环。

for 循环

虽然所有循环结构都可以用 while 或者 do...while 表示,但 Java 提供的 for 循环使一些循环结构变得更加简单。

以下图 1 为它的运行逻辑:

java水仙花问题 水仙花java怎么写_循环结构

图1

从运行逻辑图中可以得出 for 循环执行步骤:

  • 第一步执行表达式1,可初始化一个或多个循环控制变量;
  • 第二步执行表达式2,若值为 true,则执行循环体语句,然后在执行第三步,若值为 false,则跳出循环体语句;
  • 第三步执行表达式3,更新循环控制变量;
  • 第四步再次执行条件表达式,也就是跳转到第二步,如此往复。

for 循环语法格式如下:



  1. //三个表达式之间以;分隔。
  2. for(表达式1; 表达式2; 表达式3) {
  3. 循环体语句序列;
  4. }

for 循环使用案例:循环打印”好好学习,天天向上“ n 次。



  1. public class ForTest {
  2. public static void main(String[] args) {
  3. // 创建Scanner对象
  4. Scanner input = new Scanner(System.in);
  5. // 获取输入的整数值
  6. int n = input.nextInt();

  7. for(int i=1;i<n;i++){
  8. System.out.print("好好学习 天天向上");
  9. }
  10. }
  11. }

按照 for 循环的执行步骤,以上案例的执行过程为:第一步定义一个整型变量 i,并赋值为 1,第二步判断变量 i 是否小于 n,小于的话执行循环体中的代码,打印一次”好好学习 天天向上“,第三步对变量 i 的值加 1,第四步重新判断变量 i 是否小于 n,重复第二步和第三步,直到变量 i 的值不小于 n,退出循环。

当 n 等于 5 时,输出结果如下:



  1. 好好学习 天天向上
  2. 好好学习 天天向上
  3. 好好学习 天天向上
  4. 好好学习 天天向上
  5. 好好学习 天天向上

自减运算符 --

在以上案例中,我们使用 for 循环结合自增运算符 ++ 循环输出语句,下面我们来了解一下,怎么使用 for 循环结合自减运算符 -- 来实现同样的功能。



  1. public class ForTest {
  2. public static void main(String[] args) {
  3. // 创建Scanner对象
  4. Scanner input = new Scanner(System.in);
  5. // 获取输入的整数值
  6. int n = input.nextInt();

  7. for(int i=10;i>n;i--){
  8. System.out.print("好好学习 天天向上");
  9. }
  10. }
  11. }

当 n 等于 5 时,输出结果如下:



  1. 好好学习 天天向上
  2. 好好学习 天天向上
  3. 好好学习 天天向上
  4. 好好学习 天天向上
  5. 好好学习 天天向上

自减运算符 -- 可以置于变量后(i--),也可以置于变量前(--i),置于变量后表示先使用 i,再对 i 的值减 1,置于变量前表示先对 i 的值减 1,然后再使用 i。它的原理和我们之前学的自增运算符(++)是一样的。

/*
* 任务:使用for循环输出所有的水仙花数
*水仙花数特征:
  - 该值处于 100(包括)到 999(包括)之间;
  - 其个位数的三次幂,十位数的三次幂,百位数的三次幂的和等于这个数本身。
* 输出样式:x是一个水仙花数。
*/


public class ForTest {
    public static void main(String[] args) {
    
        // 请在 Begin-End 间编写代码
        
        /********** Begin **********/
        // 第一步:使用for循环依次取999到100中的每个数,判断是否为水仙花数
        for(int i = 999;i >= 100;i--){
        // 第二步:获取个位
        int a = i%10;
        // 第三步:获取十位
        int b = i/10%10;
        // 第四步:获取百位
        int c = i/100;
        // 第五步:判断个位数的三次幂,十位数的三次幂,百位数的三次幂的和是否等于这个数本身,等于的话,输出该数
        int s = a*a*a + b*b*b + c*c*c;
        if(s == i){
          System.out.println(i + "是一个水仙花数。");
        }
       /********** End **********/
        }
    }
}