我正在尝试 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/