2013-03-01 16 views
0

這是我有:我有我的while循環顯示兩個打印第二時間問題圍繞

import java.util.*; 
import java.text.*; 

public class Proj4 { 
    public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 
     String again = "y"; 
     final int MAX_STUDENTS = 100; 
     final int MIN_EXAM = 0; 
     final int MAX_EXAM = 50; 
     final int MIN_FINAL = 0; 
     final int MAX_FINAL = 100; 

     String[] names = new String[MAX_STUDENTS]; 
     int[] exams = new int[MAX_STUDENTS * 4]; 
     int student = 1; 

     DecimalFormat df = new DecimalFormat("#0.0"); 

     do { 
      System.out.print("Please enter the name of student " + student 
        + ": "); 
      String line; 
      line = s.nextLine().toUpperCase(); 
      names = line.split(" "); 
      for (int i = 0; i < 4; i++) { 
       if (i == 3) { 
        System.out.print("Please enter score for Final Exam: "); 
        exams[i] = s.nextInt(); 
       } 

       else { 
        System.out.print("Please enter score for Exam " + (i + 1) 
          + ": "); 
        exams[i] = s.nextInt(); 
        if (student == 1) { 
         if ((exams[0] < MIN_EXAM || exams[0] > MAX_EXAM) 
           || (exams[1] < MIN_EXAM || exams[1] > MAX_EXAM) 
           || (exams[2] < MIN_EXAM || exams[2] > MAX_EXAM)) { 
          System.out.println("Invalid enter 0-50 only..."); 
          System.out.print("Please re-enter score: "); 
          exams[i] = s.nextInt(); 
         } else if (exams[3] < MIN_FINAL || exams[3] > MAX_FINAL) { 
          System.out.println("Invalid enter 0-100 only..."); 
          System.out.print("Please re-enter score: "); 
          exams[i] = s.nextInt(); 
         } 
        } else if (student == 2) { 
         if ((exams[0] < MIN_EXAM || exams[0] > MAX_EXAM) 
           || (exams[1] < MIN_EXAM || exams[1] > MAX_EXAM) 
           || (exams[2] < MIN_EXAM || exams[2] > MAX_EXAM)) { 
          System.out.println("Invalid enter 0-50 only..."); 
          System.out.print("Please re-enter score: "); 
          exams[i + 4] = s.nextInt(); 
         } else if (exams[3] < MIN_FINAL || exams[3] > MAX_FINAL) { 
          System.out.println("Invalid enter 0-100 only..."); 
          System.out.print("Please re-enter score: "); 
          exams[i + 4] = s.nextInt(); 
         } 
        } 
       } 
      } 
      System.out.print("do you wish to enter another? (y or n) "); 
      again = s.next(); 
      if (again.equalsIgnoreCase("y")) 
       student++; 
     } while (again.equalsIgnoreCase("y")); 

     System.out.println("***Class Results***"); 
     System.out 
       .println(names[1] 
         + "," 
         + names[0] 
         + " " 
         + "Exam Percentage: " 
         + ((float) (exams[0] + exams[1] + exams[2] + exams[3])/(MAX_EXAM * 3 + MAX_FINAL)) 
         * 100 + "%"); 
     if (student == 2) 
      ; 
     System.out 
       .println(names[3] 
         + "," 
         + names[2] 
         + " " 
         + "Exam Percentage: " 
         + ((float) (exams[4] + exams[5] + exams[6] + exams[7])/(MAX_EXAM * 3 + MAX_FINAL)) 
         * 100 + "%"); 
     if (student == 3) 
      ; 
     System.out 
       .println(names[5] 
         + "," 
         + names[4] 
         + " " 
         + "Exam Percentage: " 
         + ((float) (exams[8] + exams[9] + exams[10] + exams[11])/(MAX_EXAM * 3 + MAX_FINAL)) 
         * 100 + "%"); 
     if (student == 4) 
      ; 
     System.out 
       .println(names[7] 
         + "," 
         + names[6] 
         + " " 
         + "Exam Percentage: " 
         + ((float) (exams[12] + exams[13] + exams[14] + exams[15])/(MAX_EXAM * 3 + MAX_FINAL)) 
         * 100 + "%"); 
    } 
} 

我的程序似乎運行正是我想要/需要它的方式唯一的問題是,當我讓程序再次運行輸出上像這樣在同一行兩個字符串:

Please enter the name of student 2: Please enter score for Exam 1: 

我不知道該做些什麼來解決這個問題。在我的代碼中有什麼東西只在第二次,也許第三次和第四次時纔會出現混亂?

回答

1

IFS後刪除分號

if (student == 3) 
      ; // <- remove it 
    System.out.println(//... 

因爲現在的Java將其理解爲

if (student == 3){} 
System.out.println(//... 

變化

System.out.print("do you wish to enter another? (y or n) "); 
again = s.next(); 

System.out.print("do you wish to enter another? (y or n) "); 
again = s.nextLine(); 

next不會消耗新行標誌,所以當你next後使用nextLine它會消耗僅此新行標誌,並轉到另一指令。相同的規則適用於nextInt


要存儲的學生姓名的數組,你可以根據學生數量使用的字符串

String[][] names = new String[MAX_STUDENTS][]; 

和存儲的學生姓名二維數組每一行中

names[student] = line.split(" "); 

要獲得頭名的第一個學生,你將不得不使用這種形式

names[0][0]; //you probably know that indexes in array starts from zero 

爲了讓您可以遍歷各行的所有學生的名字,然後在列

for(int stId=0; stId<student; stId++){ 
    for(int nameNumber=0; nameNumber<names[stId].length; nameNumber++){ 
     // print names[stId][nameNumber]` 
+0

哦好吧,我疑難雜症我固定的部分,但問題是,即使發生了膛我加入的if語句 – 2013-03-01 23:38:56

+0

@JosephMindrup這是杉杉的錯誤,我發現了,會盡量找到更多的,沒有後顧之憂:) – Pshemo 2013-03-01 23:40:05

+0

哦,沒事謝謝:) – 2013-03-01 23:41:37

0

如果你想在弦上的println而不是打印一個新行使用打印,或包括在斷行字符的串。

+0

問題是它不會讓我在第一行輸入任何東西,我必須輸入第二個學生的名字,它只是跳過它並進入考試的輸入分數1,如果我使用println,它只是發送'請輸入exam1的分數:'到下一行,仍然劑量讓我進入 – 2013-03-01 23:41:12