0

Student というクラスを作成し、それに 3 つの値 (StudentNumber、Course、Mark) を割り当てました。次に、作成した学生を、studentsCourses という arrayList に割り当てました。

このようにして、各生徒は配列内のインデックスを取得します。しかし、どうすれば学生をarrayListの外に戻すことができますか...それが理にかなっていますか? それらを保存していますが、情報を呼び出して表示する方法がわかりません。

public static void main (String[]args){
ArrayList<Student> studentsCourses= new ArrayList<Student>();
String studentNumber="~";
String course="~";
int mark=0;

Student pat;

Student s=null;

do{
  s=new Student();
  System.out.println("Please Enter Your Student ID (type quit to Quit):\n");
  studentNumber=keybrd.next();
  s.setStudentNumber(studentNumber);
  System.out.println("Please Enter Your Course ID:\n");
  course=keybrd.next();
  s.setCourse(course);
  System.out.println("Please Enter Your Mark:\n");
  mark=keybrd.nextInt();
  s.setMark(mark);
  s.printStates();
  studentsCourses.add(s);
}while(!studentNumber.equals("quit"));

System.out.println(studentsCourses.size());   
System.out.println(studentsCourses);

では、作成された生徒 (パット) にインデックス 1 の状態を割り当てたい場合、どうすればよいでしょうか?

私のもう1つの問題(このコードに伴う)は、私の歩哨です。quit と入力すると、実際に終了します。しかし、最初に「do」を実行して終了します。つまり、実際には、番号が「終了」である学生になり、コースが何であれ、マークが何であれ、ということです。

「終了」が入力されるとすぐにdoを強制的に中断するにはどうすればよいですか?

4

7 に答える 7

1

試す

System.out.println("Please Enter Your Student ID (type quit to Quit):\n");
        studentNumber=keybrd.next();

        while (!studentNumber.equals("quit")){
            s=new Student();

            s.setStudentNumber(studentNumber);
            System.out.println("Please Enter Your Course ID:\n");
            course=keybrd.next();
            s.setCourse(course);
            System.out.println("Please Enter Your Mark:\n");
            mark=keybrd.nextInt();
            s.setMark(mark);
            s.printStates();
            studentsCourses.add(s);

            System.out.println("Please Enter Your Student ID (type quit to Quit):\n");
            studentNumber=keybrd.next();
        }
于 2013-03-08T05:25:23.333 に答える
1

知っておくべきことが2つあります:-

まず、終了チェックdo-whileループであるループを使用しているため、終了する前に少なくとも1回実行されます。それを避けたい場合は、ループを使用してみてください。while

次に、リストからすべての要素を取得するには、次のようにlist.get(index)またはforループトラバーサルを使用できます。-

List<Student> students = new ArrayList<Student>();
for (Student student : students) {
    // Do something with the student object.
}

アップデート:-

上で見たのforは、実際にはForeachループです。これが意味することです

for each item in collection:
  do something to item

したがって、ループは、

コレクション(学生)の各アイテム(学生)に対して、アイテム(学生)に 何かをします

ループ部分に戻ります。すべてを忘れて、を使用してbreak;ください。

このコードの後studentNumber=keybrd.next();で、チェックを実行してループを中断します。

if(studentNumber.equals("quit")){
    break;
}

シンプルなソリューション。

于 2013-03-08T05:26:05.630 に答える
1

toString()Studentクラスにメソッドを追加できます。

  @Override
  public String toString()
  {
      return "\tStudentNumber: " + studentNumber
                + "\tCourse: " + course 
                + "\tMarks: " + marks;

  }

そして、あなたは言うことができます:

   System.out.println(studentsCourses);

これに関する限り:

   How do I force it to break the do as soon as "quit" is typed?

この動作は、do..while()!を使用しているためです。while代わりに使用してみてください。

于 2013-03-08T05:26:38.773 に答える
1

ArrayList は配列ではありません... バッキング ストアとして配列を使用するリストです。

リストからの取得方法はlist.get(index)

または、構文糖衣を使用してそれらをループすることもできます

List<Student> students = new ArrayList<Student>();
// add students
for (Student student : students) {
  // do something with student
}
于 2013-03-08T05:22:30.937 に答える
1

メソッドを使用get(int)して要素を取得します。

メソッドを使用add(int, E)して、要素をインデックスに挿入します。

于 2013-03-08T05:23:53.190 に答える
1

「しかし、どうすれば学生をarrayListの外に戻すことができますか...それが理にかなっている場合?私はそれらを保存していますが、それを見ることができるように情報を呼び出す方法がわかりません。」

arraylist からデータを取得するには:

for (Student student : studentsCourses) {
        System.out.println(student.getStudentNumber());
        System.out.println(student.getCourse());
        System.out.println(student.getMarkr());
    }

また

for (int i = 0; i < studentsCourses.size(); i++) {
        Student student = studentsCourses.get(i);
        System.out.println(student.getStudentNumber());
        System.out.println(student.getCourse());
        System.out.println(student.getMarkr());
    }

他の問題を解決するには、次を試すことができます。

      do{
          s=new Student();
          System.out.println("Please Enter Your Student ID (type quit to Quit):\n");
          studentNumber=keybrd.next();
          if(studentNumber.equals("quit"))
              break;
          s.setStudentNumber(studentNumber);
          System.out.println("Please Enter Your Course ID:\n");
          course=keybrd.next();
          s.setCourse(course);
          System.out.println("Please Enter Your Mark:\n");
          mark=keybrd.nextInt();
          s.setMark(mark);
          s.printStates();
          studentsCourses.add(s);
        }while(true);
于 2013-03-08T05:31:26.453 に答える
0

キーを学生番号として、そのキーへのオブジェクトを学生オブジェクトとして持つハッシュマップを使用しないのはなぜですか。このようにして、重複を回避することもできます。
センチネルのために

         // 1. Create a Scanner using the InputStream available.
        Scanner scanner = new Scanner( System.in );
        String input=null;
do{
        // 2. Don't forget to prompt the user
        System.out.print( "Type some data for the program: " );

        // 3. Use the Scanner to read a line of text from the user.
         input = scanner.nextLine();

        // 4. Now, you can do anything with the input string that you need to.
        // Like, output it to the user.
        System.out.println( "input = " + input );
}while(!input.equalsIgnoreCase("quit"));
于 2013-03-08T05:19:32.453 に答える