使用哨兵控制的循环

时间:2012-11-29 21:23:59

标签: java while-loop sentinel

我在练习时遇到问题,要求让用户提示姓名并将该名称回显到屏幕,直到用户输入标记值。我知道这是一个哨兵控制的循环,但我坚持认为我正在处理输入名称而不是整数。我试图按照我的书中的程序来解释如何使用整数而不是字符串“name”的sentinel值。我尝试查找这个答案,看到类似name.equals(“停止”)的内容,如果它甚至适用于此。并查看了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();
        }

2 个答案:

答案 0 :(得分:0)

do {
    name = reader.next();
} while (name.lastIndexOf(SENTINEL) == -1);

我认为该名称不能包含其中的标记。在其他情况下,请将== -1更改为

!= length(name) - 1

PS。您宣布String name两次。

PS2。更好的条件:

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

答案 1 :(得分:0)

将哨兵用于循环:

在前哨控制的循环中,更改部分取决于来自用户的数据。在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