我如何在循环中找到第n个术语?的java

时间:2016-11-28 20:35:02

标签: java loops

以下是我为了更好地回答我的问题所做的计划。

循环代码

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>

2 个答案:

答案 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。优良作法是将其称为iday之类的一个符号(或简称)。它使代码更易于阅读和理解。