以下是我为了更好地回答我的问题所做的计划。
循环代码
public void scheme1(int d){
// first modification
if (mark<=20){
System.out.print("\nBecause mark under 20 mark stays as its original value. mark="+mark);
return;
}
int total = mark;
int finalMark=20;
System.out.print("Scheme 1"+"\n");
// Loop
for(int loopParameter = START_CONDITION;
loopParameter <= d;loopParameter++){
System.out.print("(" + loopParameter + ") " + total + " ");
total = total + constantDiffSch1;
// second modification
if (total < 40){
System.out.print("\nThis work can be up to " + loopParameter);
return;
}
// third modification
if (total<=20){
System.out.print("\nBecause mark drops below 20, mark stays as 20. final mark="+ finalMark);
return;
}
} // End
System.out.print("\n\n");
}
这是我的程序输出
请输入标记:64
请输入显示天数:10
方案1
(0)64(1)59(2)54(3)49(4)44
这项工作可能会在失败前最多延迟4天。
这就是输出
请输入标记:64
请输入显示天数:10
方案1
(0)64(1)59(2)54(3)49(4)44(5)39(6)34(7)29(8)24
这项工作可能会在失败前最多延迟4天。
我必须显示作业迟到的天数并计算迟到的惩罚(标记-5)我还必须显示失败所需的天数(失败的天数可能大于用户输入的天数(d)。失败的标记少于40。
第二个例子(输出)
请输入标记:64
请输入显示天数:2
方案1
(0)64(1)59(2)54
这项工作可能会在失败前最多延迟4天。
我差不多完成了我的代码,但是这个问题让我失望了。
P.S。我是java的新手
这是我的完整程序
LatePenalties calss
public class LatePenalties {
// attributes
private int mark;
private static final int constantDiffSch1 = -5;
private static final double constantDiffSch2 = 0.9;
private static final int START_CONDITION = 0;
// constructors
public LatePenalties(int m) {
mark = m;
}
// methods
public void scheme1(int d) {
// first modification
if (mark<=20){
System.out.print("\nBecause mark under 20 mark stays as its original value. mark="+mark);
return;
}
int total = mark;
int finalMark=20;
System.out.print("Scheme 1"+"\n");
// Loop
for(int loopParameter = START_CONDITION;
loopParameter <= d;loopParameter++){
System.out.print("(" + loopParameter + ") " + total + " ");
total = total + constantDiffSch1;
// second modification
if (total < 40){
System.out.print("\nThis work can be up to " + loopParameter);
return;
}
// third modification
if (total<=20){
System.out.print("\nBecause mark drops below 20, mark stays as 20. final mark="+ finalMark);
return;
}
} // End
System.out.print("\n\n");
}
public void scheme2(int d) {
double total = mark;
System.out.print("\n\nScheme 2"+"\n");
// Loop
for(int loopParameter = START_CONDITION;
loopParameter <= d;loopParameter++){
System.out.print( "(" + loopParameter + ") " );
System.out.printf("%.02f",total);
System.out.print(" ");
total = total * constantDiffSch2;
} // End
System.out.print("\n");
}
}
主要课程
import java.util.Scanner;
public class LatePenaltiesUser {
public static void main(String [] args) {
// local variables
Scanner input = new Scanner(System.in);
LatePenalties latePen;
int mark;
int days;
// input
do{
System.out.print("Please input mark (between 0 and 100) --> ");
mark = input.nextInt();
if (( mark < 0 ) | (mark > 100 )){System.out.print("\n" + "Input value outside the range!!!" + "\n");}
}while(( mark < 0 ) | (mark > 100 ));
do{
System.out.print("Please input number of days to display (between 0 and 20) --> ");
days = input.nextInt();
System.out.print("\n");
if (( days < 0 ) | (days > 20 )){System.out.print("Input value outside the range!!!"+ "\n");}
}while(( days < 0 ) | (days > 20 ));
// computation
latePen = new LatePenalties(mark);
latePen.scheme1(days);
latePen.scheme2(days);
}
}
我必须显示faling标记出现的时间(小于40),但是我必须在20或者达到天数时停止循环,正如我在示例中显示的那样。< / p>
答案 0 :(得分:1)
break
小于40时,您可以使用total
退出循环。您可以按以下方式更新scheme1
方法
public void scheme1(int d) {
int total = mark;
System.out.print("Scheme 1" + "\n");
int days = 0;
// Loop
for (int loopParameter = START_CONDITION; loopParameter <= d; loopParameter++) {
System.out.print("(" + loopParameter + ") " + total + " ");
total = total + constantDiffSch1;
if(total < 40)
break;
days++;
} // End
if (total <= 40) {
System.out.print("\nThis work can be up to " + days +" days late before failing.");
}
System.out.print("\n\n");
}
请输入标记(0到100之间) - &gt; 82 请输入要显示的天数(0到20之间) - &gt; 10
方案1(0)82(1)77(2)72(3)67(4)62(5)57(6)52 (7)47(8)42 这项工作可能会在失败前最多延迟8天。
答案 1 :(得分:0)
您不需要知道自己的loopParameter
来计算天数。您可以这样计算:
int days = (d - 40) / -constantDiffSch1;
如果要退出循环,可以使用break
。所以:
if (total < 20) break;
关闭主题。不要那样打电话给loopParameter
。优良作法是将其称为i
或day
之类的一个符号(或简称)。它使代码更易于阅读和理解。