基本上我想做的是:
你的一位教授听说了你正在崭露头角的编程技能,让你写一篇文章可以用来帮助他们评分的程序。教授给了三次50分的考试一次100分的期末考试。您的程序将提示用户输入学生的姓名,输入为姓名(例如Bob Smith),学生的3次考试成绩和1次期末考试成绩(全部为整)数字)。每个学期的班级人数各不相同,但100人是上限(声明为常量)。
在做任何计算或显示任何输出之前,为所有学生阅读信息。验证三门考试成绩在0-50分之间,期末考试成绩在0-100分之间。将最小值和最大值声明为常量,以便可以根据需要轻松更新它们。如果无效,显示错误消息并允许用户重新输入无效分数。一旦所有的学生信息被读取in,以LASTNAME, FIRSTNAME(全部大写),学生的格式显示每个学生的姓名考试百分比(所有考试的总和加上期末/可能的总数)到1的小数和学生的最终成绩。
但是我有麻烦弄清楚如何分配用户输入到一个数组(或2个数组可能是因为名字和姓氏?),但我很迷失在该做什么,这就是我现在所拥有的:
import java.util.*;
import java.text.*;
public class Proj4 {
public static void main(String[] args){
Scanner s= new Scanner(System.in);
String input;
String again = "y";
int [] exams = new int[4];
int student = 1;
do
{
String [] names = new String[student];
System.out.print("PLease enter the name of student " + student + ": " );
names[student-1] = s.nextLine();
for ( int i = 0; i < exams.length; i++){
if(i==3){
System.out.print("Please enter score for Final Exam: ");
exams[i] = s.nextInt();
}
else{
System.out.print("Please enter score for Exam " + (i+1) + ": ");
exams[i] = s.nextInt();
if((exams[0]<0||exams[0]>50)||(exams[1]<0||exams[1]>50)||(exams[2]<0||exams[2]>50)){
System.out.println("Invalid enter 0-50 only...");
System.out.print("Please re-enter score: ");
exams[i] = s.nextInt();
}
else if(exams[3]<0||exams[3]>100){
System.out.println("Invalid enter 0-100 only...");
System.out.print("Please re-enter score: ");
exams[i] = s.nextInt();
}
}
}
System.out.print("do you wish to enter another? (y or n) ");
again = s.nextLine();
if(again!="y")
student++;
}while (again.equalsIgnoreCase ("y"));
}
}
如果我的代码有任何其他错误,帮助也会很棒。
首先,声明由需求指定的常量:
final int MAX_STUDENTS = 100;
final int MIN_EXAM = 0;
final int MAX_EXAM = 50;
final int MIN_FINAL = 0;
final int MAX_FINAL = 100.
然后,因为只允许使用数组,所以声明两个数组。一个保存学生姓名,另一个保存考试成绩。因此,它们将是不同类型的。将String数组初始化为学生的最大数量。初始化考试成绩数组为4 * MAX_STUDENTS,因为每个学生将有4个考试成绩:
String[] student_names = new String[MAX_STUDENTS];
int[] exam_scores = new int[MAX_STUDENTS * 4];
当读入一个新学生时,将他/她的名字放在student_name数组的新索引中。然后,当您读取每个后续考试分数(3次考试,1次期末考试)时,增量地填充exam_scores数组。
当您要打印出分数时,保留一个变量来跟踪打印的exam_scores数组的最后一个索引。这样,当您移动到另一个学生时(当您遍历数组时),您就知道您在exam_scores数组中停在哪里了。
还有其他(更好的)方法可以做到这一点(例如,使用列表是最好的,但即使使用数组,你也可以比这更花哨)。我不确定你到目前为止学到了什么,所以选择了最基本的方法来实现这个程序。