使用哨兵控制的循环



我在练习中遇到问题,要求用户提示一个名称并将该名称回显到屏幕上,直到用户输入哨兵值。我知道这是一个哨兵控制的循环,但我坚持我正在处理输入名称而不是整数的事实。我试图遵循我书中的一个程序,该程序仅解释了如何将哨兵值与整数一起使用,而不是与字符串"名称"一起使用。我尝试查找此答案,并看到类似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!");
  } 

最新更新