2013-09-30 79 views
0

我正在尝试做一个简单的程序,根据输入得分使用while循环和do-while循环验证并向学生分配成绩。我明白这很简单,代码工作正常,但没有验证,但循环不循环,程序终止。这是我这么远使用while循环验证输入

import io.*; 
public class Marks { 
    public static void main(String[] args) { 
     double marks, inMarks; 
     int assess, inAssess, calcMark, ten; 
     boolean dna, dnc, fail, pass, calcDna, calcDnc, calcF, calcP; 
     marks = inMarks(); 
     assess = inAssess(); 
     dna = calcDna(assess); 
     dnc = calcDnc(assess); 
     fail = calcF(assess, marks); 
     pass = calcP(assess, marks); 
     ten = calcMark(marks); 

     if (dna == false) { 
      if (dnc == true) { 
       System.out.println("DNC-" + (int) marks); 
      } else if (fail == true) { 
       System.out.println("F-" + (int) marks); 
      } else if (pass == true) { 
       System.out.println(ten + "-" + (int) marks); 
      } 
     } else { 
      System.out.println("DNA"); 
     } 
    } 
    private static double inMarks() { 
     double marks; 
     boolean validMark; 
     marks = ConsoleInput.readDouble("Input student's mark"); 
     while ((marks < 0) && (marks > 100)) { 
      System.out.println("invalid mark, please enter again"); 
      marks = ConsoleInput.readDouble("Input student's mark"); 
     } 
     // Assertion 0 > marks > 100 
     return marks; 
    } 

    private static int inAssess() { 
     int assess; 
     boolean validAssess; 
     do { 
      assess = ConsoleInput 
        .readInt("Input number of assessments student completed"); 
      if ((0 > assess) && (assess > 5)) { 
       System.out 
         .println("invalid assessment attendence. please enter again"); 
      } 
     } while ((0 >= assess) && (assess >= 5)); 
     // Assertion 0 < assess < 5 
     return assess; 
    } 
    private static boolean calcDna(int assess) { 
     boolean calcDna; 
     calcDna = false; 
     if ((assess == 0)) { 
      calcDna = true; 
     } 
     return calcDna; 
    } 

    private static boolean calcDnc(int assess) { 
     boolean calcDnc; 
     calcDnc = false; 
     if ((assess > 0) && (assess <= 4)) { 
      calcDnc = true; 
     } 
     return calcDnc; 
    } 

    private static boolean calcF(int assess, double marks) { 
     boolean calcF; 
     calcF = false; 
     if ((assess == 5) && (marks < 50.0)) { 
      calcF = true; 
     } 
     return calcF; 
    } 

    private static boolean calcP(int assess, double marks) { 
     boolean calcP; 
     calcP = false; 
     if ((assess == 5) && (marks > 50.0)) { 
      calcP = true; 
     } 
     return calcP; 
    } 

    private static int calcMark(double marks) { 
     int ten; 
     ten = (int) marks/10; 
     return ten; 

    } 
} 
+5

我看不出有任何循环存在。 –

+0

你不觉得'失败==真'有点多余吗? –

+0

你指的是哪个循环?你能突出显示那些在代码中不起作用的东西吗? – Nikhil

回答

2

第一个问题:

while((marks < 0) && (marks > 100)) 

必须是或:

while((marks < 0) || (marks > 100)) 

不存在数量小于0和大于100 :)

do { 
    assess = ConsoleInput.readInt ("Input number of assessments student completed"); 
    if((0 <= assess) || (assess >= 5)) 
    { 
     System.out.println("invalid assessment attendence. please enter again"); 
    } 
} while ((0 <= assess) || (assess >= 5)); 
+0

这可以解决'inMarks'的问题,但是如果我对'inAssess'也做了同样的事情,如果评估输入是5或0,它会无限循环 – Ryane

+0

我没有足够的代表对不起:S – Ryane

+0

@hasan Ryane的编辑是正确的,但它被拒绝,因为你原来的帖子太激进了。请自己修改代码 - 你已经改变了条件。在将其作为解决方案发布之前测试您的代码是一种好习惯。 – BartoszKP

2

如果通过“循环不循环”,you'r Ë提到这一点:

while((marks < 0) && (marks > 100)) 

那么你的问题是,marks不可能既小于零且大于100

类似的问题在这里:

} while ((0 >= assess) && (assess >= 5)); 

assess不能既少大于等于5.

1

变更

while((marks < 0) && (marks > 100));

while ((0 >= assess) && (assess >= 5));

while((marks < 0) || (marks > 100))

while ((0 > assess) && (assess > 5));