【问题标题】:Using sentinel-controlled loop使用哨兵控制循环
【发布时间】:2022-02-27 01:03:15
【问题描述】:

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

【问题讨论】:

  • 向我们展示您尝试过的代码?
  • 我添加了到目前为止的内容..

标签: java while-loop sentinel


【解决方案1】:
do {
    name = reader.next();
} while (name.lastIndexOf(SENTINEL) == -1);

我假设名称中不能包含哨兵。在其他情况下,将== -1 更改为

!= length(name) - 1

PS。你声明了两次String name

PS2。更好的条件:

while (!name.endsWith(String.valueOf(SENTINEL));

【讨论】:

  • sentinel 值是否是一个名称或者它是否像 # like what i have 是否重要
  • 是的,非常感谢,我知道我的代码是一团糟,我是新手 :)
  • sentinel 值不是名字,它是你写的#
【解决方案2】:

sentinel for循环的使用:

在哨兵控制的循环中,更改部分取决于来自用户的数据。在 for 语句中这样做很尴尬。所以for语句中的change部分被省略了,放在方便的位置。

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

【讨论】:

    【解决方案3】:

    要求用户提示名称并回显该名称的练习 直到用户输入标记值为止。

    我希望看到更多类似的东西:

      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!");
      } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多