因此,用户在不同的字段中输入他/她的姓名。 (必须那样)
参考图片:
我要做的是在4个测试标记旁边显示他们的名字。
所以它看起来像这样
John Smith 55.0 100.0 23.0 50。 Jane Smith 100.0 50.0 76.0 22.0 等等。
我的代码是
public class StudentGradesView extends FrameView {
final static int students=15;
final static int numOfTest=4;
final static int firstNLast=2;
//Start with the first student in the 2D array
private int row = 0;
//DELCARING THE 2D ARRAY
double[][] marks = new double[students][numOfTest];
String[][] names = new String[students][firstNLast];
//1D Arrays
double testScores[]=new double[4];
String studentNames[]=new String[2];
public void addInfo(){
studentNames[0]= firstNameIn.getText();
studentNames[1]= lastNameIn.getText();
testScores[0]=Double.parseDouble(testOneIn.getText());
testScores[1]=Double.parseDouble(testTwoIn.getText());
testScores[2]=Double.parseDouble(testThreeIn.getText());
testScores[3]=Double.parseDouble(testFourIn.getText());
//Add first and last name to 2d array
for(int col=0;col <studentNames.length; col++){
names[row][col]= studentNames[col];
}
//Add all four test scores to the current student
for(int col=0;col < testScores.length; col++){
marks[row][col]= testScores[col];
}
//Advance to the next student
row++;
}
public void displayArray(){
for(int i=0;i<names.length;i++){
for(int j=0; j<firstNLast;j++){
finalOutput.append(names[i][j]+" ");
}
finalOutput.append("\n");
}
for(int i=0; i<marks.length;i++){
for(int j=0; j <numOfTest; j++){
finalOutput.append(marks[i][j]+" ");
}
finalOutput.append("\n");
}
}
}
当我点击列表/ displayArray()时,我最终得到了什么;这是:
所以我被困在如何让它们在彼此旁边打印。还有一种方法可以只打印用户输入的条目数量吗?如果一个用户输入了一组信息,只打印一行?
感谢。
答案 0 :(得分:3)
在你的displayArray方法中,我首先通过调用finalOutput.setText("")
清除JTextArea,然后在for循环中从0到行 - 到目前为止已添加的学生数。否则,您将循环遍历整个数组,该数组将在行索引之上具有所有空值。
更好 - 不要使用数组,而是使用数组列表。
更好的是:创建一个学生班,其中包含一个学生的姓名和成绩,并使用一个ArrayList<Student>
。
更好的是 - 在JTable中显示上面的数据。
答案 1 :(得分:2)
因为这显然是一个学习练习,我不打算给你代码。
快速而肮脏的答案是将您的显示代码更改为以下内容:
public void displayArray(){
for (int i = 0; i < names.length; i++) {
if (/* some test to check that the entry is populated */) {
// append the names for student i
// append the scores for student i
// append newline
}
}
}
我会留给你填写详细信息。
但这里真正的问题是你犯了很多设计错误。
将名称和分数存储为数组数组是一个坏主意。 Java提供了更易于使用的List
类型,并且没有固定的长度。
每名学生不需要有固定数量的分数。
每个学生不需要固定数量的名字。
您不需要有固定数量的学生。
您应该创建一个代表每个学生的班级。它可能非常简单,只包含名称和分数列表的getter和setter,或者您可以尝试封装状态......
为学生创建课程后,您可以使用JList
(或JTable
)来显示List<Student>
。显示屏看起来更漂亮,您不需要“列表”按钮。
(现在有可能,这些事情将由你的讲师解决......而且这之后的练习涉及实施这些事情......)
答案 2 :(得分:1)
如果数组是并行的,那么你可以使用一个循环:
public void displayArray()
{
for(int i = 0 ; i < names.length ; i++)
{
/*
* If the first or last name are null then skip over and go to the
* next item
*/
if(names[i][0] == null || names[i][1] == null)
{
continue;
}
for(int j = 0; j < firstNLast; j++)
{
finalOutput.append(
String.format("%10s%s%10s%s",
names[i][j], " ", marks[i][j], " "));
}
finalOutput.append("\n");
}
}