2013-09-27 167 views
0

循環將只運行兩次 - 如果輸入一個無效的id兩次,它只會在第二次之後結束。沒有錯誤,它就像它認爲它應該結束一樣。我沒有看到validID變成true,因爲它仍然不是id陣列中的數字之一。循環僅運行兩次

import javax.swing.*; 
public class StudentIDArray { 
    public static void main(String[] args) { 
     int[] id = {1121, 1234, 2864, 3141, 4650, 5167, 5678, 6044, 7737, 9101}; 
     String[] name = {"Bryan", "Colleen", "David", "Frank", "Glennis", "Jerome", "Jessie", "Larry", "Steve", "Tina"}; 
     double[] gpa = {3.7, 3.2, 2.9, 3.5, 2.4, 3.8, 3.9, 3.9, 2.6, 2.2}; 

     final int STUDENTS = 10; 
     String idNumber; 
     int studentID; 
     double studentGPA = 0.0; 
     boolean validID = false; 
     String studentName = ""; 
     int x; 

     do{ 
      idNumber = JOptionPane.showInputDialog(null, "Enter the student ID number."); 
      studentID = Integer.parseInt(idNumber); 
      for(x = 0; x < STUDENTS; x++){ 
       if(studentID == id[x]){ 
        validID = true; 
        studentName = name[x]; 
        studentGPA = gpa[x]; 
       } 
      } 

      if(validID) { 
       JOptionPane.showMessageDialog(null, "ID number " + studentID + " belongs to " + studentName + " who has a GPA of " + studentGPA + "."); 
      } else { 
       JOptionPane.showMessageDialog(null, studentID + " is an invalid ID. Please try again."); 
       idNumber = JOptionPane.showInputDialog(null, "Enter the student ID number."); 
      } 
     } 
     while(validID = false); 
    } 
} 

當我嘗試while(studentID != id[x])爲做循環的結束,但隨後它提供了一個數組索引越界異常。

回答

2

你犯了一個典型的錯誤:

while(validID = false); 

這應該使用等號==,而不是賦值運算符。

1

使用

while(!validID); 

你有什麼現在

while(validID = false); 

是價值false分配給validID,並將它作爲條件表達式。換句話說,它將始終評估爲false,並且只會循環一次。

0

應該

while(validID == false); 
1

那是因爲你曾經說過

while (validId = false)

將分配假以validId並在while循環計算錯誤,而是使用

while (validId == false)

,以便它檢查的條件而不是分配一個值

0

首先問自己,「我應該創造一個對象?「

在面向對象的語言中,並行數組從不是一個好主意。

此:

int[] id = {1121, 1234, 2864, 3141, 4650, 5167, 5678, 6044, 7737, 9101}; 
String[] name = {"Bryan", "Colleen", "David", "Frank", "Glennis", "Jerome", "Jessie", "Larry", "Steve", "Tina"}; 
double[] gpa = {3.7, 3.2, 2.9, 3.5, 2.4, 3.8, 3.9, 3.9, 2.6, 2.2}; 

應該是:

public class Student { 
    private int id;  // Generate getter/setter 
    private String name; // Generate getter/setter 
    private double gpa; // Generate getter/setter 

    public Student(int id, String name, double gpa) { 
    this.id = id; 
    this.name = name; 
    this.gpa = gpa; 
    } 
} 

Student[] students = { new Student(1121, "Bryan", 3.7), ... }; 

要回答你的問題,只需添加一個!validId

if (!validID) 
+0

該分配需要平行陣列。 –

1

使用while(validID == false);,而不是while(validID = false);即使用雙等於(====)而不是單等於(=),這是分配運算符。

後來將false指定爲validID而不是比較,因此總是false