循环只会运行两次 - 如果输入无效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循环时,它会给出一个数组索引超出边界异常。
答案 0 :(得分:2)
你犯了一个经典错误:
while(validID = false);
这应该使用等于运算符==
,而不是赋值运算符。
答案 1 :(得分:1)
使用
while(!validID);
你现在拥有什么
while(validID = false);
将值false
分配给validID
并将其用作条件表达式。换句话说,它将始终评估为false
,并且只会循环一次。
答案 2 :(得分:1)
这是因为你说过
while (validId = false)
将为validId赋值false并在while循环中计算false,而不是使用
while (validId == false)
以便检查条件而不是分配值
答案 3 :(得分:1)
使用while(validID == false);
代替while(validID = false);
,即。使用双等号( ==
)而不是单一等号( =
),这是赋值运算符。
稍后将false
分配给validID
而不是比较,因此始终false
。
答案 4 :(得分:0)
应该是
while(validID == false);
答案 5 :(得分: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)