2013-09-30 86 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));