ClassRoll和Constructor方法

时间:2015-12-04 04:04:48

标签: java class methods constructor

State

}

public class Exams {

private int score1 = 0;

private int score2 = 0;

private int score3 = 0;

 public void setScore1(int sc){
    score1 = sc;
}

public void setScore2(int sc){
    score2 = sc;
}

public void setScore3(int sc){
    score3 = sc;
}
public int getScore1(){
    return score1;
}

public int getScore2(){
    return score2;
}

public int getScore3(){
    return score3;
}

public String toString(){
    return String.format("%-10s %-10s %4.2f\n", score1, score2, score3);

}

}

public class Student {

private String fName;

private String lName;

private Exams scores;

Student(String fn, String ln) {
    fName = fn;
    lName = ln;
    scores = new scores();

}

public void setScore1(int sc) {
    scores.setScore1(sc);

}

public void setScore2(int sc) {
     scores.setScore2(sc);

}

public void setScore3(int sc) {
     scores.setScore3(sc);

}


public String toSring(){
    return String.format("%-10s %-10s %4.2f\n", fName, lName, scores);
}

public double getAverage(){

}

public int compareTo(Student s){
    String name1 = lName + "  " + fName;
    String name2 = s.lName + "  " + s.fName;

    return ((lName + "  " + fName).compareTo(s.lName + "  " + s.fName));
}

}

我有一个包含几个不同类的程序。在我声明私有变量之后的classroll类中,我必须创建一个classroll构造函数" ClassRoll(String f)"那是假设......

从输入文件f中读取类卷数据,为每个学生创建Student对象,并将它们添加到学生的ArrayList中。输入文件包含第一行的课程标题。每个学生的数据显示在一个单独的行上,该行由名字,姓氏,得分1,得分2和得分3组成,由至少一个空格分隔。

我尽力开始,但我很困惑,并且不知道正确的做法。有人可以帮忙吗

谢谢

2 个答案:

答案 0 :(得分:0)

  

从输入文件f中读取类卷数据,创建Student   每个学生的对象,并将它们添加到ArrayList中   生。

好的,基本上,我们必须从某个文件中获取学生的信息并将其添加到某个ArrayList中。好吧,让我们先创建一个ArrayList来存储东西。

ArrayList<Student> studentInfo = new ArrayList<Student>();

您已从此文件中读取此代码:

Scanner kb = new Scanner(System.in);
String inpFileName = kb.next();
File inpFile = new File(inpFileName);

让我们继续......

  

输入文件包含第一行的课程标题。

因此kb.nextLine()中的第一个元素是课程标题​​。这意味着我们必须开始从第二行添加学生数据,也就是跳过第一行。好的....

  

每个学生的数据显示在一个单独的行中   名字,姓氏,得分1,得分2和得分3由at分隔   至少一个空间

所以基本上,如果我们设法从space个字符中拆分行,我们就会得到数据。现在实现这个:

让我们创建一个boolean变量来检查它的第一行是否为:

boolean firstLine = true; // True - because it starts from first line

开始阅读行的时间......

String courseName = ""; //I'll just store in a string, use as you wish

while(kb.hasNextLine()){
    if(firstLine){
        courseName = kb.nextLine(); //Set courseName if its first line
        firstLine = false; // We have moved past first line
    }
    else{ // Otherwise get student data
        // Lets store the student data in a string. This is just one line.
        // Something like: "FirstName LastName score1 score2 score3"
        String studentData = kb.nextLine();

        // Now time to split up data (so we get names/scores separately)
        String[] stData = studentData.split("\\s"); //Remember they have spaces between them. \\s --> A pattern that matches one or more spaces
        //So we can use those to separate data

        // This is how String[] stData contains the student information:
        // stData[0] = first name of student
        // stData[1] = last name of student
        // stData[2] = score1
        // stData[3] = score2
        // stData[4] = score3
        // Use this data however you like

        //Now that we have separated data, lets add the student object to ArrayList since we got all details.
        studentInfo.add(new Student(stData[0], stData[1]);
        // This last line of code is probably not going to do the trick.
        // You may need to make changes to your code to do stuff
    }
}

无论如何,我告诉过你如何阅读问题以及如何继续。你有所有的字符串,名字,姓氏和分数。现在由你决定如何使用它们。虽然最后一行代码可能不适用于您,但它的提示仍在继续。

休息你应该先尝试弄清楚自己,因为如果我做完所有的功课就没有乐趣;)

答案 1 :(得分:-1)

您已将SE替换为scire1,2,3

当你得到一个var in setter方法时,它需要放在你的类的属性中。

只需替换为此代码:

public void setScore1(int sc){
       score1=sc;
    }

    public void setScore2(int sc){
        score2=sc;
    }

    public void setScore3(int sc){
        score3=sc;
    }