我在练习中遇到问题,要求用户提示一个名称并将该名称回显到屏幕上,直到用户输入哨兵值。我知道这是一个哨兵控制的循环,但我坚持我正在处理输入名称而不是整数的事实。我试图遵循我书中的一个程序,该程序仅解释了如何将哨兵值与整数一起使用,而不是与字符串"名称"一起使用。我尝试查找此答案,并看到类似name.equals("stop")的内容,如果它甚至适用于此。并在 API 上查找了它,但仍然没有发现它有帮助。我想看看它作为一个整体是如何适用的。
注意:这是我到目前为止所做的,我想知道我离我有多远。
import java.util.*;
public class SentinelControlledLoop {
static Scanner console = new Scanner(System.in);
static final int SENTINEL = #;
public static void main (String[] args) {
String name;
System.out.println("Enter a name " + "ending with " + SENTINEL);
String name = reader.next();
while (!name.equals(“stop”)) {
name = reader.next();
}
do {
name = reader.next();
} while (name.lastIndexOf(SENTINEL) == -1);
我假设名称中不能包含哨兵。在其他情况下,== -1
更改为
!= length(name) - 1
附言。你声明String name
两次。
PS2.更好的条件:
while (!name.endsWith(String.valueOf(SENTINEL));
哨兵循环的使用:
在哨兵控制的循环中,更改部分取决于来自用户的数据。在 for 语句中执行此操作很尴尬。因此,从 for 语句中省略了更改部分,并将其放在方便的位置。
import java.util.Scanner;
class EvalSqrt
{
public static void main (String[] args )
{
Scanner scan = new Scanner( System.in );
double x;
System.out.print("Enter a value for x or -1 to exit: ") ;
x = scan.nextDouble();
for ( ; x >= 0.0 ; )
{
System.out.println( "Square root of " + x + " is " + Math.sqrt( x ) );
System.out.print("Enter a value for x or -1 to exit: ") ;
x = scan.nextDouble();
}
}
}
有关更多详细信息:https://chortle.ccsu.edu/java5/Notes/chap41/ch41_13.html
要求用户提示名称并回显该名称的练习到屏幕,直到用户输入哨兵值。
我希望看到更像:
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String SENTINEL = "stop";
String name;
do {
System.out.print("Enter a name ('" + SENTINEL + "' to quit): ");
name = reader.nextLine();
if (!name.equals(SENTINEL)) {
System.out.println(name);
}
} while (!name.equals(SENTINEL));
System.out.println("Goodbye!");
}