Java中“while”的问题

我正在尝试 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",excessHours );
    System.out.printf( "%s's gross pay is $%.2f\n",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(); with employeeName = input.next();它不再跳过它.我想知道,有什么办法可以让我在使用employeeName = input.nextLine()时不跳过输入;?

在此先感谢您的帮助!

解决方法

我猜这是因为你在while循环中使用的!=测试比较字符串以获得引用相等性.也就是说,当它进行比较时,它不只是测试以查看字符串是否具有相同的字符序列;它检查它们是否是完全相同的对象.但是当Scanner创建一个String来包含它从标准输入读取的文本时,该String不会与代码中字符串文字“stop”的对象相同.它们是恰好具有相同内容的两个对象,但它们存在于内存中的不同位置,因此!=将它们视为不相等.

解决方案:改为开始你的循环:

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

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...