第1关:指定条件输入
任务描述
本关任务:学习掌握使用 do-while 语句实现循环结构,并实现一个指定输入功能的程序。
相关知识
为了完成本关任务,你需要掌握以下知识:
-
do-while 语句;
-
指定输入场景。
do-while 循环语法
do-while 循环是 while 循环的变体,其语法如下所示:
do {
// 循环体
语句(组)
} while(循环继续的条件);
可以看到,do-while 循环的结构与 while 循环十分相似。唯一的区别是,do-while 循环是先执行一遍循环体中的语句(组), 然后进行循环继续条件的判断;而 while 循环是先进行循环继续条件的判断,再决定是否执行循环体中的语句(组)。
示例如下:
/** 代码清单 1 */
count = 0;
do {
count++;
System.out.print(count);
} while (count<0);
输出:
1
从代码清单 1
中可以看出,尽管变量count
的值一开始是0
,并不满足count<0
的循环控制条件,但是循环体中的语句组仍然执行了一遍。
指定输入场景
有的时候,我们编写的程序需要同用户进行交互,需要用户输入一些值。最常见的一个例子就是“登录”,即用户需要输入账号密码进行登录,当校验通过后用户才能进一步与程序进行交互。
而另一个常见的例子是“注册”,用户在注册后才能进行登录操作。无论是“登录”还是“注册”,都需要用户输入一定的信息。而这时候,程序通常会对用户的输入有一定的要求,例如“在设置密码的时候,要求密码的长度不短于 6 位”。当用户没有按照要求输入时,程序会提示用户输入错误,然后让用户重新输入。在这种类似场景下,用 do-while 语句能够很好的满足需求。
编程要求
根据提示,在右侧编辑器 Begin-End 区域补充代码,实现要求用户输入长度不低于 6 位的密码的功能。具体要求如下:
- 需要判断密码长度是否不低于 6 位,如果满足条件则输出字符串
success!
以及有效的密码作为提示,结束程序;如果不满足条件则等待用户再次输入; - 当用户累计输入 3 次仍不满足条件,输出提示字符串
ops!
,并结束程序; - 所有输出提示末尾都需要换行。
测试说明
平台会对你编写的代码进行测试:
测试输入:
12345
123456
预期输出:
123456 success!
测试输入:
12345
1234
123
123456
预期输出:
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 循环语句的使用,并实现一个查找最高分的简单程序。
相关知识
为了完成本关任务,你需要掌握以下知识:
-
do-while 循环适用场景;
-
如何找到最大值。
do-while 循环适用场景
对于那些循环体至少需要执行一次的场景,使用 do-while 循环比较合适。例如,不断的读取控制台输入的整数,直到读取到 0 为止。在这里,循环体中读取整数的语句,至少需要执行一次,因此可以用以下写法:
/** 代码清单 1 */
Scanner input = new Scanner(System.in);
int data = 0;
do {
data = input.nextInt();
} 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
提示
Scanner input = new Scanner(System.in);
// 输入字符串
String numStr = input.nextLine();
// 判断正整数
if(!isNumeric(numStr)){
System.out.println("no");
} else {
System.out.println("yes");
}
// 注: 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;
}
}