Java 如何检查数组是否为空?

Java 如何检查数组是否为空?,java,Java,这是我的代码,输出将只打印第一个课程,我不知道出了什么问题,我需要一些帮助:( 输出: NAME OF student 1000000001 NAME OF COURSE 200 MARK 100.0 NAME OF COURSE 200 MARK 100.0 NAME OF COURSE 200 MARK 100.0 NAME OF student 1111111111 NAME OF COURSE 300 MARK 70.0 NAME OF COURSE 300 MA

这是我的代码,输出将只打印第一个课程,我不知道出了什么问题,我需要一些帮助:(

输出:

NAME OF student 1000000001  
NAME OF COURSE 200 MARK 100.0  
NAME OF COURSE 200 MARK 100.0  
NAME OF COURSE 200 MARK 100.0  
NAME OF student 1111111111  
NAME OF COURSE 300 MARK 70.0  
NAME OF COURSE 300 MARK 70.0

这就是给您带来麻烦的原因。第一次打电话时,您将为0到4之间的所有课程分配CN

void addCourse(int CN){

for(int i=0 ; i<listOfCourses.length ; i++){
    if (listOfCourses[i]==0) {
    listOfCourses[i]=CN;  
    }
 }
 numCoures++; 
 }

addCourse方法将listOfCourses的所有5个元素设置为第一次调用中提供的值。若要解决此问题,请在使用break语句设置值后退出循环。否则,代码将遍历整个数组:

void addCourse(int CN) {
    for (int i = 0; i < listOfCourses.length; i++) {
        if (listOfCourses[i] == 0) {
            listOfCourses[i] = CN;
            break;
        }
    }
    numCoures++;
}
您的问题是您的
addCourse()
方法: 在这里,我们首先检查
numCoures
是否仍在数组的边界内。如果是这样,我们在索引
numCoures
处插入给定的课程编号,第一次是
0
,依此类推。以
++
作为后缀,
numCoures
在评估后也会增加

使用HashMap的解决方案 但是,我建议您将普通数组替换为许多有用的Java集合之一(除非这是一个明确要求您使用普通数组的练习?)。例如,您可以使用。地图将一个键与一个值关联。这似乎非常适合您的场景:课程编号可以是键,标记可以是值

我们将宣布如下:

private HashMap<Integer, Float> courses = new HashMap<>();
addMark()
将变成:

void addMark(int courseNum, double mark) {
    courses.replace(courseNum, mark);
}
如果您查找
HashMap
put()
replace()
方法,您会注意到我们也可以在
addMark()
中使用
put()
,但我觉得这样做更清楚您的意图

现在应更改另外两种方法:

int getNumCourses() {
    return courses.size();
}
我将把
print()
留给您

另外,您现在可以去掉这三个,因为它们已被我们整洁的
HashMap
所取代:

private int[] listOfCourses = new int[5]; // bye bye
private double[] Mark = new double[5]; // cya
private int numCoures; // sayounara
使用
地图的好处
  • 一个学生可以有5门以上的课程
  • 您的代码变得更短,更易于阅读
  • 您的代码也变得不那么容易出错
  • 更改或删除课程或成绩很容易
补充说明: 您应该更加注意类、变量和方法的名称。我将指出我注意到的:

  • 班级
    student
    应该是
    student
    (班级应该以大写字母开头)
  • 变量
    Mark
    应为
    Mark
    (变量应以小写字母开头)
  • 方法
    getnumCoures()
    应该是
    getnumCoures()
    )(方法应该是camelCase,并且您键入的课程错误)
  • 变量
    student\u ID
    和方法
    getStudentID()
    可以简化为
    ID
    getID()
    -我们已经知道我们正在处理一个学生
1。你的格式是一场噩梦。2.您需要学习如何调试。尝试引入
break
课程列表[i]=CN之后for
循环中进行code>。试着在格式化和类名、方法名和变量名等方面多下些功夫。你的班级应该以大写字母开始(
student
应该是
student
)。变量应以小写字母开头(
Mark
应为
Mark
)。方法应该是camelCase(
getnumCoures()
应该是
getnumCoures()
),为什么有时是
课程
,而在其他地方是
课程
?请记住,您的风格可以作为代码质量的指标。除此之外,为了让您的生活更轻松,我建议您查看许多Java集合。普通数组可能是正确的选择,但通常是
列表
Map
Set
将是一个更好的朋友。这是作业吗?这是现在的输出tho:c:NAME OF student 1000000001 NAME OF COURSE 0.0 NAME OF COURSE 200 MARK 100.0 NAME OF COURSE 201 MARK 99.0 NAME OF student 1111111111 NAME OF COURSE 0 MARK 0.0 NAME OF COURSE 300 MARK70.0是的,我修改了它,以便它可以分配第一门课程。(numCourses=0)。
void addCourse(int CN) {
    for (int i = 0; i < listOfCourses.length; i++) {
        if (listOfCourses[i] == 0) {
            listOfCourses[i] = CN;
        }
    }
    numCoures++;
}
void addCourse(int CN) {
    if (numCoures < listOfCourses.length) {
        listOfCourses[numCoures++] = CN;
    }
}
private HashMap<Integer, Float> courses = new HashMap<>();
void addCourse(int courseNum) {
    courses.put(courseNum, null);
}
void addMark(int courseNum, double mark) {
    courses.replace(courseNum, mark);
}
int getNumCourses() {
    return courses.size();
}
private int[] listOfCourses = new int[5]; // bye bye
private double[] Mark = new double[5]; // cya
private int numCoures; // sayounara