학생 정보 입력 정렬 분할 실험에 대한 총결

7711 단어
① 실험 요구: 키보드는 학생의 이름과 점수를 입력하고 점수의 상승 순서에 따라 학생 정보를 출력한다.
사고방식: 1.Studen 클래스 만들기, name, score 만들기 및 메서드 관련
                    2.StudentTest 클래스를 만들고 학생 정보를 입력합니다.
                    3.객체 속성에 대한 비교입니다.여기에서 나는 대상 수조로 승차 출력을 실현한다.(구체적으로 코드를 보십시오.)
사실 대상 속성의 크기를 비교하는 데는 Comparator 인터페이스가 있습니다.구체적으로 보십시오http://blog.csdn.net/x_zhaohu/article/details/51020262.
코드 현실:
      1..Studen 클래스 만들기, name, score 만들기 및 메서드 관련
package com.xingzhaohu.test;

/**
 * @ClassName Student
 * @Description TODO
 * @author XingZhaohu  [email protected]
 * @date 2016-4-11   7:26:16
 */
public class Student {
		private String name;
		private double score; 
		
		public Student(){
			
		}
		public Student(String name,double score){
			this.name = name;
			this.score = score;
		}
		
		@Override
		public String toString(){
			return "name="+this.getName()+" score="+this.getScore();
		}
		/**
		 * @return the name
		 */
		public String getName() {
			return name;
		}
		/**
		 * @param name the name to set
		 */
		public void setName(String name) {
			this.name = name;
		}
		/**
		 * @return the score
		 */
		public double getScore() {
			return score;
		}
		/**
		 * @param score the score to set
		 */
		public void setScore(double score) {
			this.score = score;
		}
		
		
}

       2.StudentTest 클래스를 만들고 학생 정보를 입력합니다.객체 속성에 대한 비교입니다.여기에서 나는 대상 수조로 승차 출력을 실현한다.
package com.xingzhaohu.test;

import java.util.Scanner;

public class StudentTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
	
		
		System.out.println(" :");
		int count = in.nextInt();// 
		Student[] students = new Student[count];
		
		int i = 0;
		while(i<count){
			System.out.println(" :");
			String name = in.next();//in.nextLine();
			double score = in.nextDouble();
			
			students[i++] = new Student(name,score);
		}
		
		for(i=0;i<students.length;i++){
			for(int j=i+1;j<students.length;j++){
				Student temp = new Student();
				if(students[i].getScore()>students[j].getScore()){
					System.out.println(students[i].getScore());
					temp = students[i];
					students[i] = students[j];
					students[j] = temp;
				}
			}
		}
		
		for(Student s : students)
			System.out.println(s.toString());
		
	}

}



② 요구 사항 충족:
            1.다음 형식으로 문자열을 입력합니다.
유비, 유비, 201822036772016-04-12 13:41:58
관우,관우,,201822036662016-04-12 13:42:58
장비, 장비, 201822036882016-04-12 13:43:58
           2.Student 클래스, 속성:name,number,date,를 만듭니다.문자열 분할을 Student에 기록합니다.
           3.그리고 학호의 승차순에 따라 출력한다.(이곳에서는 Comparator 인터페이스를 실현하고compare를 다시 쓰는 방법으로 승차순 출력을 실현한다)
아이디어:
         1.Student 클래스를 만들고, 속성을 만들고, 여러 가지 방법을 다룹니다.(가장 중요한 것은 구조 방법)
         2.(대상을 향한 사상을 더욱 잘 이해하기 위해) InputMessage 클래스를 만들어 분할을 처리하고 Student의 대상을 만든다.
        3.Comparator 인터페이스를 구현하는 Compare 클래스를 만들고 compare () 방법을 다시 씁니다.
        4.StudentMessage 클래스 (main () 방법 포함) 를 만들고main () 방법에서Collection을 호출합니다.sort();정렬이 이루어집니다.
코드 구현:
  1.Student 클래스를 만들고, 속성을 만들고, 여러 가지 방법을 다룹니다.
class Student{
	private String name;
	private long number;// 
	private String date;
	public Student(){
		
	}
	public Student(String name,long number,String date){
		this.name = name;
		this.number = number;
		this.date = date;
		
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public long getNumber() {
		return number;
	}
	public void setNumber(long number) {
		this.number = number;
	}
	public String getDate() {
		return date;
	}
	public void setDate(String date) {
		this.date = date;
	}
	
	
	public String toString(){
		return "name = "+this.getName()+" number = "+this.getNumber()+" date = "+this.getDate();
	}
}

2. 분할을 처리하고 Student의 대상을 만드는 InputMessage 클래스를 만듭니다.스트링과 롱의 전환에 관한 문제입니다.
class InputMessage{
	private String message;
	
	public InputMessage(String message){
		this.message = message;
		
	}
	
	public Student inputMessage(){
		
		String[] messages = this.message.split(",|,");// 
		
		/**
		 *  int msg = Integer.parseInt(messages[3]); 
		 *   long msg = Integer.parseInt(messages[3]);  
		 *   :long max value:9223372036854775807
		 *  : 
		 */
		long msg = Long.parseLong(messages[3]);
		
		Student student = new Student(messages[1],msg,messages[4]);
		 return student;
	}
}

3. Comparaotr 인터페이스를 구현하는 Compare 클래스
class Compare implements Comparator<Student>{

	@Override
	public int compare(Student o1, Student o2) {
		// TODO  
		if(o1.getNumber()>o2.getNumber())
			return 1;
		else if(o1.getNumber()>o2.getNumber())
			return -1;
		else
			return 0;
	}

4. 테스트 클래스 구현
테스트를 할 때 힘을 아끼기 위해 학생의 수를 입력하지 않고 직접 값을 부여했다.직접 복사를 토대로 수정하고 직접 입력하세요.잘못 보고할 거야.
       
package com.xingzhaohu.ch05;


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

/**
 * @ClassName StudentsMessage
 * @Description  , , 
 * @author XingZhaohu  [email protected]
 * @date 2016-4-11   11:47:52
 */
public class StudentsMessage {

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner  in = new Scanner(System.in);
		System.out.println(" :");
		int stuCount = in.nextInt();
		
		Student[] students = new Student[100];// 。
		
		int i=1;
		List<Student> list = new ArrayList();
		while(i<=stuCount){
			System.out.println(" :");
			//in = new Scanner(System.in);
			String value = in.nextLine();
		
			InputMessage inputmessage = new InputMessage(value);
			students[i] = inputmessage.inputMessage();
		
			list.add(students[i++]);
		
		}
		
		Compare compare = new Compare();  
		Collections.sort(list,compare); 
		
		for(Student s : (List<Student>)list){
			System.out.println(s.toString());
		}
		
	}

}

참으로 new를 얻는 자는 천하를 얻는다.바로 관건적인 코드입니다. 해결되었습니다. 여기서 두 형님의 도움에 감사를 드려야 합니다. 정확한 것은 다음과 같습니다.
package com.xingzhaohu.ch05;


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

/**
 * @ClassName StudentsMessage
 * @Description  , , 
 * @author XingZhaohu  [email protected]
 * @date 2016-4-11   11:47:52
 */
public class StudentsMessage {

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner  in = new Scanner(System.in);
		System.out.println(" :");
		int stuCount = in.nextInt();
		
		Student[] students = new Student[100];// 。
		
		int i=1;
		List<Student> list = new ArrayList();
		while(i<=stuCount){
			System.out.println(" :");
			in = new Scanner(System.in);// !
			String value = in.nextLine();
		
			InputMessage inputmessage = new InputMessage(value);
			students[i] = inputmessage.inputMessage();
		
			list.add(students[i++]);
		
		}
		
		Compare compare = new Compare();  
		Collections.sort(list,compare); 
		
		for(Student s : (List<Student>)list){
			System.out.println(s.toString());
		}
		
	}

}

문제 발생:
      1.student 빈 값이 명시적인 매개 변수로 전송되어 프로그램이 잘못 보고되고 해결 방법은 Student를 데이터 형식으로 만드는 방법으로 실례화된 대상을 되돌려줍니다.
      2.int 및 String long 및 String 변환각자 방법이 있다.
      3. 학생 수를 입력하고 그룹 범위를 초과하여 다시 new 입력 흐름;
      4.객체의 배열을 선언할 때 배열의 크기는 변수를 사용할 수 있지만그러나 일정한 값을 부여해야 한다. 이 부분을 나는 아직 이해하지 못했다. 만약에 수조의 크기가 변수라면 클래스가 불러올 때 클래스 대상의 수조에 공간을 분배하지 않거나 적게 분배하지 않을 것이라고 추측했다.미리 성명할 수밖에 없다.(해결 예정)

좋은 웹페이지 즐겨찾기