(头哥)Java程序设计---------do-while 循环

第1关:指定条件输入

任务描述

本关任务:学习掌握使用 do-while 语句实现循环结构,并实现一个指定输入功能的程序。

相关知识

为了完成本关任务,你需要掌握以下知识:

  1. do-while 语句;

  2. 指定输入场景。

do-while 循环语法

do-while 循环是 while 循环的变体,其语法如下所示:

  1. do {
  2. // 循环体
  3. 语句(组)
  4. } while(循环继续的条件);

可以看到,do-while 循环的结构与 while 循环十分相似。唯一的区别是,do-while 循环是先执行一遍循环体中的语句(组), 然后进行循环继续条件的判断;而 while 循环是先进行循环继续条件的判断,再决定是否执行循环体中的语句(组)。

示例如下:

  1. /** 代码清单 1 */
  2. count = 0;
  3. do {
  4. count++;
  5. System.out.print(count);
  6. } while (count<0);

输出:

  1. 1

代码清单 1中可以看出,尽管变量count的值一开始是0,并不满足count<0的循环控制条件,但是循环体中的语句组仍然执行了一遍。

指定输入场景

有的时候,我们编写的程序需要同用户进行交互,需要用户输入一些值。最常见的一个例子就是“登录”,即用户需要输入账号密码进行登录,当校验通过后用户才能进一步与程序进行交互。

而另一个常见的例子是“注册”,用户在注册后才能进行登录操作。无论是“登录”还是“注册”,都需要用户输入一定的信息。而这时候,程序通常会对用户的输入有一定的要求,例如“在设置密码的时候,要求密码的长度不短于 6 位”。当用户没有按照要求输入时,程序会提示用户输入错误,然后让用户重新输入。在这种类似场景下,用 do-while 语句能够很好的满足需求。

编程要求

根据提示,在右侧编辑器 Begin-End 区域补充代码,实现要求用户输入长度不低于 6 位的密码的功能。具体要求如下:

  • 需要判断密码长度是否不低于 6 位,如果满足条件则输出字符串success!以及有效的密码作为提示,结束程序;如果不满足条件则等待用户再次输入;
  • 当用户累计输入 3 次仍不满足条件,输出提示字符串ops!,并结束程序;
  • 所有输出提示末尾都需要换行。

测试说明

平台会对你编写的代码进行测试:

测试输入:

  1. 12345
  2. 123456

预期输出:

  1. 123456 success!

测试输入:

  1. 12345
  2. 1234
  3. 123
  4. 123456

预期输出:

  1. ops!
package step1;

import java.util.Scanner;

public class Password 
{
    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        int inputCount = 0;
        String password;

        //请在指定位置填写代码。
        /********* Begin *********/
            password = input.next();
            do 
            {
                inputCount++;
                if (password.length() >= 6) 
                {
                    System.out.println(password + " success!");
                    break;
                } 
                else 
                {
                    password = input.next();
                    if(inputCount==3)
                    {
                    System.out.println("ops!");
                    }
                }
             }while (inputCount < 3);

        /********* End *********/
       input.close();
    }
}

 

第2关:找到最高分

任务描述

本关任务:巩固 do-while 循环语句的使用,并实现一个查找最高分的简单程序。

相关知识

为了完成本关任务,你需要掌握以下知识:

  1. do-while 循环适用场景;

  2. 如何找到最大值。

do-while 循环适用场景

对于那些循环体至少需要执行一次的场景,使用 do-while 循环比较合适。例如,不断的读取控制台输入的整数,直到读取到 0 为止。在这里,循环体中读取整数的语句,至少需要执行一次,因此可以用以下写法:

  1. /** 代码清单 1 */
  2. Scanner input = new Scanner(System.in);
  3. int data = 0;
  4. do {
  5. data = input.nextInt();
  6. } while(data != 0);

如何找最大值

我们可以用一个变量保存最大值,以下称为最大值变量(即保存有最大值的变量)。 然后当输入新的值时,用最大值变量与新值比较,如果新值比最大值大,那么就把新值赋值给最大值变量。 如此,最大值变量中存的值,永远是最大值。就像打擂台,只有胜者能留在擂台上,那么擂台上的始终是目前最“厉害”的。

编程要求

根据提示,在右侧编辑器 Begin-End 区域补充代码,实现一个找出最高分的简单程序。具体要求如下:

  • 首先输入一个正整数表示学生数,学生数必须是正整数,否则重新输入,直到输入正整数为止;

  • 本任务提供了一种简单的判断输入是否是正整数的方法,直接使用即可,详见最后的提示。

  • 学生数输入完毕后,依次输入相应数量的学生姓名以及分数;最后输出最高分的学生姓名及分数。

  • 输出最后不换行。

  • 测试数据中,可能会输入小数作为学生数,请注意处理。

测试说明

平台会对你编写的代码进行测试:

测试输入: 5 张三 80 李四 90 王五 100 赵六 90 周七 80

预期输出: 王五 100

测试输入: 0.5 5 张三 80 李四 90 王五 100 赵六 90 周七 80

预期输出: illegal number of students! 王五 100

提示

  1. Scanner input = new Scanner(System.in);
  2. // 输入字符串
  3. String numStr = input.nextLine();
  4. // 判断正整数
  5. if(!isNumeric(numStr)){
  6. System.out.println("no");
  7. } else {
  8. System.out.println("yes");
  9. }

// 注: isNumeric 方法的具体实现详见代码编辑部分,在本任务中,以上语句可正常执行。

package step2;

import java.util.Scanner;
class Main 
{
    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        String stuNumStr = "";
        int studentCount = 0;
        int maxScore = 0;
        int newScore = 0;
        String maxName = "";
        String newName = "";
        // 请在指定位置填写代码。
        /********* Begin *********/
        do
        {
            stuNumStr=input.nextLine();
        }
        while(!isNumeric(stuNumStr));
        {
            studentCount=Integer.parseInt(stuNumStr);
        }
        int i=0;
        while(i<studentCount)
        {
            newName=input.next();
            newScore=input.nextInt();
            if(newScore>maxScore)
            {
                maxScore=newScore;
                maxName=newName;
            }
            i++;
        }
        /********* End *********/
        System.out.println(String.format("%s %d", maxName, maxScore));
        input.close();
    }

    public static boolean isNumeric(String str) 
    {
        if (str.length() == 0) 
        {
            return false;
        }
        for (int i = 0; i < str.length(); i++) 
        {
            if (!Character.isDigit(str.charAt(i))) 
            {
                return false;
            }
        }
        int i = Integer.parseInt(str);
        if(i<=0)
        {
            return false;
        }
        return true;
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失棉的羊 .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值