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])结束 do 循环时,它会给出一个数组索引超出范围异常。

4

6 回答 6

2

你犯了一个经典的错误:

while(validID = false);

这应该使用相等运算符==,而不是赋值运算符。

于 2013-09-27T02:37:34.450 回答
1

采用

while(!validID);

你现在拥有的

while(validID = false);

正在将值分配给false并将validID其用作条件表达式。换句话说,它总是会计算false并且只会循环一次。

于 2013-09-27T02:37:28.860 回答
1

那是因为你说过

while (validId = false)

这会将 false 分配给 validId 并在 while 循环中评估 false,而不是使用

while (validId == false)

以便它检查条件而不是分配值

于 2013-09-27T02:37:57.140 回答
1

使用while(validID == false);而不是while(validID = false); 使用双等号(==)而不是单等号(=),这是赋值运算符。

后来是分配falsevalidID而不是比较,因此总是false

于 2013-09-27T02:45:49.037 回答
0

它应该是

while(validID == false);
于 2013-09-27T02:37:31.373 回答
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), ... };

要回答您的问题,只需添加一个!before validId

if (!validID)
于 2013-09-27T02:39:49.513 回答