需要帮助将用户输入分配到增加的字符串数组中

时间:2013-03-01 04:55:23

标签: java arrays loops user-input auto-increment

基本上我总体上要做的是:

你的一位教授听说了你新兴的编程专业知识,并要求你写一个单一的 可用于帮助他们进行评分的程序。教授给出了三个50分的考试 一次100分的期末考试。您的程序将提示用户输入学生的姓名 名字姓氏(即Bob Smith),学生的3级考试成绩和1级考试成绩(全部为全部 号)。班级大小从学期到学期不等,但100是限制(声明为常数)。

在进行任何计算或显示任何输出之前,请读取所有学生的信息。校验 3个考试成绩在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"));
}
}

如果我的代码还有其他问题,那么帮助也很棒。

1 个答案:

答案 0 :(得分:2)

首先,声明由需求指定的常量:

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_names数组的新索引中。然后,当您阅读每个后续测试分数(3个考试,1个最终考试)时,逐步填写exam_scores数组。

当你打印出分数时,保留一个变量来跟踪打印的exam_scores数组的最后一个索引。这样,当你移动到另一个学生时(当你在数组中进行迭代时),你知道你在exam_scores数组中停下的位置。

还有其他(更好的)方法可以做到这一点(例如,使用列表是最好的,但即使使用数组,你也可以获得比这更好的方法)。我不确定你到目前为止学到了什么,所以选择了最基本的方式来实现该程序。