bow*_*bow 6 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
Run Code Online (Sandbox Code Playgroud)
问题是,while循环似乎不起作用.每当我输入"stop"作为employeeName时,程序就会继续.我尝试用任何其他字符串替换"停止",它仍然无法正常工作.但是当我尝试使用"stop"初始化employeeName时,程序会立即退出,这是预期的.我在这做错了什么?
此外,在第一个循环之后,程序总是跳过询问employeeName.我尝试更换employeeName = input.nextLine();,employeeName = input.next();它不再跳过它.我想知道,有什么办法可以让它在使用时不会跳过输入employeeName = input.nextLine();?
在此先感谢您的帮助!
Eug*_*kov 13
在Java中比较字符串时,使用equals方法,而不是==或!=运算符.通过使用这些运算符,您只需比较对象的引用而不是它们的内容.所以你的病情应该是这样的
while ( !"stop".equals(employeeName) )
Run Code Online (Sandbox Code Playgroud)
请注意,"stop"是第一个,因为理论上您的employeeName变量可以为null.这样代码就不会NullPointerException通过在null对象上调用equals方法来抛出.
我猜这是因为!=你在while循环中使用的测试比较了字符串以便引用相等.也就是说,当它进行比较时,它不只是测试以查看字符串是否具有相同的字符序列; 它检查它们是否是完全相同的对象.但是当Scanner创建一个String包含从标准输入读取的文本时,它将String不会与"stop"代码中的字符串文字相同.它们是恰好具有相同内容的两个对象,但它们存在于内存中的不同位置,因此!=将它们视为不相等.
解决方案:改为开始你的循环:
while (!"stop".equals(employeeName)) {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1556 次 |
| 最近记录: |