java - Java 中 "while"的问题

标签 java loops while-loop

我正在尝试 Java 编程书中的几个练习。我有以下代码:

import java.io.*;
import java.util.Scanner;

public class Ex420
{
 public static void main( String args[] )
 {
  String employeeName = "";
  double workHours,excessHours, hourlyRates, grossPay;
  Scanner input = new Scanner( System.in );

  while ( employeeName != "stop" )
  {
   System.out.printf( "\nInput employee name or stop to exit: " );
    employeeName = input.nextLine();
   System.out.printf( "Input working hours: " );
    workHours = input.nextDouble();
   System.out.printf( "Input hourly rates: " );
    hourlyRates = input.nextDouble();

   if ( workHours <= 40 & workHours >= 0 )
   {
    excessHours = 0;
    grossPay = hourlyRates * workHours;
    System.out.printf( "%s's gross pay is $%.2f\n", employeeName, grossPay );
   }
   else if ( workHours > 40 )
   {
    excessHours = workHours - 40;
    grossPay = hourlyRates * 40 + 1.5 * hourlyRates * excessHours;
    System.out.printf( "\n%s's worked for %.1f excess hours.\n", employeeName, excessHours );
    System.out.printf( "%s's gross pay is $%.2f\n", employeeName, grossPay ); 
   }
   else
   {
    System.out.printf( "Invalid input. Please try again." );
   }  
  } // end while
 } // end main
} // end class Ex420

问题是,while 循环似乎不起作用。每当我输入“stop”作为 employeeName 时,程序就会继续。我尝试用任何其他字符串替换“停止”,但它仍然不起作用。但是当我尝试用“stop”初始化 employeeName 时,程序会立即退出,这是意料之中的。我在这里做错了什么?

此外,在第一个循环之后,程序总是跳过询问 employeeName。我尝试将 employeeName = input.nextLine(); 替换为 employeeName = input.next(); 并且它不再跳过它。不过我想知道,有什么方法可以让它在使用 employeeName = input.nextLine(); 时不跳过输入?

在此先感谢您的帮助!

最佳答案

在 Java 中比较字符串时使用 equals 方法,而不是 == 或 != 运算符。通过使用这些运算符,您只需比较对对象的引用而不是它们的内容。所以你的情况应该是这样的

while ( !"stop".equals(employeeName) )

请注意“停止”是第一个,因为理论上您的 employeeName 变量可以为空。这样代码就不会通过调用 null 对象上的 equals 方法来抛出 NullPointerException

关于java - Java 中 "while"的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3122517/

相关文章:

java - MySQL 准备好的语句不从 JavaFX 文本字段读取

javascript - 使用 Javascript 将 Bootstrap 下拉列表连接到对象并循环

python - 如何在循环中读取用户输入(并且不阻塞此循环中的工作)?

php - 将每三个结果放入一个新的 TR 中

java - 修复包含计数器的 while 循环

java - 分离集合更新问题

java - 动态获取当前方法名称的较短方法

java - 从命令行执行 Java

c++ - 对于任何计数,for 循环运行一半

SwingWorker 线程中的 java.util.Timer 或 While 循环?