Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带while循环的哨兵值_Java_Loops_If Statement_While Loop_Sentinel - Fatal编程技术网

Java 带while循环的哨兵值

Java 带while循环的哨兵值,java,loops,if-statement,while-loop,sentinel,Java,Loops,If Statement,While Loop,Sentinel,我是Java的新手,正在上我的第一堂课。在过去的两周里,我一直在努力完成这项家庭作业,需要一些帮助。任务是编写一个工资单程序,提示输入工资率和工时。它需要不断循环,直到输入sentinel值。一旦输入sentinel值,它将为我平均总工资 我终于把它弄到了它会不断循环的地方,询问工资率和工作时间。它正确计算收入并将循环 这是我的问题。我似乎无法让哨兵值-1起作用。当我试图将其设置为在输入-1时结束时,它不会做任何事情。它还可以在输入每套工资率和工时后平均收入。我希望它一直等到年底,然后平均所有的

我是Java的新手,正在上我的第一堂课。在过去的两周里,我一直在努力完成这项家庭作业,需要一些帮助。任务是编写一个工资单程序,提示输入工资率和工时。它需要不断循环,直到输入sentinel值。一旦输入sentinel值,它将为我平均总工资

我终于把它弄到了它会不断循环的地方,询问工资率和工作时间。它正确计算收入并将循环

这是我的问题。我似乎无法让哨兵值-1起作用。当我试图将其设置为在输入-1时结束时,它不会做任何事情。它还可以在输入每套工资率和工时后平均收入。我希望它一直等到年底,然后平均所有的收入

请,任何输入都会有帮助

这是我到目前为止所拥有的。我正在从一个实现文件拉到一个测试文件

import java.util.Scanner;
公共类工资单
{
私人双小时;
私人双倍工资率;
私人双人房;
公众假期工资单()
{
这个.小时=小时;
这个。工资率=工资率;
}
公共无效设置小时数(双倍小时)
{
这个.小时=小时;
}
公共双小时()
{
返程时间;
}
公共收费率(双倍收费率)
{
这个。工资率=工资率;
}
公共双getPayRate()
{
回报率;
}
公共双倍支付
{
返回(工资率*小时);
}
公共无效calcPay()
{
扫描仪输入=新扫描仪(System.in);
双倍合计=0;
int付款台=0;
System.out.printf(“输入员工工资率:$”;
setPayRate(input.nextDouble());
System.out.printf(“输入员工工作时数:”);
设置小时数(input.nextDouble());
double payRate=getPayRate();
while(payRate!=-1)//循环,直到读取sentinel值。
{
如果(getHours()>40)
{
System.out.printf(“总收入为:$%.2f”,
((getPayRate()*40)+((getHours()-40)
*(getPayRate()*1.5));
grossPay=((getPayRate()*40)+((getHours()-40)
*(getPayRate()*1.5));
付款台++;
}
如果(getHours()==40)
{
System.out.printf(“总收入为:$%.2f”,((getPayRate()*40));
格罗斯佩=((getPayRate()*40));
付款台++;
}
如果(getHours()<40)
{
System.out.printf(“总收入为$%.2f%n”,
((getPayRate()*getHours()));
grossPay=(getPayRate()*getHours());
付款台++;
}
如果(付款台!=0)
{
total=total+grossPay;//将等级添加到total中
双倍平均=(双倍)总额/付款台;
System.out.printf(
%n%n输入的总收入数:%d.%n%n总计为%.2f%n“,
付款台(总计);
系统输出打印F(“%导航收入为:%.2f%n”,平均值);
}
其他的
{
System.out.println(“未输入工资率”);
}
System.out.printf(“%输入员工工资率:$”;
setPayRate(input.nextDouble());
System.out.printf(“%n输入员工工作小时数:%n”);
设置小时数(input.nextDouble());
}
}
}

在函数calcPay中只设置了一次双倍工资率,然后在一个不会改变的条件下循环(因为不再设置)

Olivia,我想你希望对setPayRate()的调用在循环中。您的平均值一直在打印出来,因为您的付款计数器从不为0。我是否希望在每组大括号内设置双倍的付款率,并在每个大括号内执行setPayRate()?也。。。我将其更改为,如果总收入最终为-1而不是payCounter,则平均值将打印出来!=0它一直在正确计算,但总收入只有-1。它似乎没有收到以前输入的任何数据。我知道我错过了一些重要的东西,但我不能确定它会是什么。为什么我的值不固定?无论使用什么作为循环条件,都必须在循环内部更改,以便循环结束。我认为最简单的方法是去掉局部变量payRate,只使用成员值。