불초 구해주십시요 어레이 리스트 생성자 문제입니다

조회수 402회

public class Student {

int num;//힉번
int mj;//중간고사 점수
int fj;//기말점수
int rj;//레포트점수
int aj;//출석점수
int sum=0;//총점
float avg=0;//평균
char hak = 0;//학점
public Student(int num, int mj, int fj, int rj, int aj,int sum,float avg,char hak) {
    this.num=num;//학번
    this.mj=mj;
    this.fj=fj;
    this.rj=rj;
    this.aj=aj;
    this.sum = sum;
    this.avg = avg;
    this.hak = hak;
}
public int getSum() {
    return sum;
}
public void setSum(int sum) {
    this.sum = sum;
}
public float getAvg() {
    return avg;
}
public void setAvg(float avg) {
    this.avg = avg;
}
public char getHak() {
    return hak;
}
public void setHak(char hak) {
    this.hak = hak;
}
public Student(int num, int mj, int fj, int rj, int aj) {
    this.num=num;//학번
    this.mj=mj;
    this.fj=fj;
    this.rj=rj;
    this.aj=aj;
}


@Override
public String toString() {

    // TODO Auto-generated method stub
    return num + "\t" + mj + "\t"+fj+"\t"+rj+"\t"+aj+"\n";

}
public String toString2() {

    // TODO Auto-generated method stub
    return num + "\t" + mj +"\t"+fj+"\t"+rj+"\t"+aj+"\n"+sum+"\n"+avg+"\n"+hak+"\n";

}
public int getNum() {
    return num;
}
public void setNum(int num) {
    this.num = num;
}
public int getMj() {
    return mj;
}
public void setMj(int mj) {
    this.mj = mj;
}
public Integer getFj() {
    return fj;
}
public void setFj(int fj) {
    this.fj = fj;
}
public int getRj() {
    return rj;
}
public void setRj(int rj) {
    this.rj = rj;
}
public int getAj() {
    return aj;
}
public void setAj(int aj) {
    this.aj = aj;
}

} //ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.ObjectInputStream.GetField; import java.util.ArrayList; import java.util.Scanner;

public class Test {

public static void main(String[] args) throws Exception {
    String start;//시작
    int num=0;//힉번
    int mj=0;//중간고사 점수
    int fj=0;//기말점수
    int rj=0;//레포트점수
    int aj=0;//출석점수
    int sum=0;//총점
    float avg=0;//평균
    float totalavg=0;//전체평균더한거
    float totalhak=0;//전체평균 값 
    char hak = 0;//학점
    int count=20;//학생수    
    ArrayList<Student> st = new ArrayList<Student>();//학생테이블
    ArrayList<Student> st2 = new ArrayList<Student>();
    String s;
    BufferedReader bReader=null;
    FileReader file= new FileReader(new File("C:\\Users\\parkjangsun\\Documents\\카카오톡 받은 파일\\점수현황.txt"));
    bReader = new BufferedReader(file);
    System.out.println("파일을 읽어 오겠습니다");
    System.out.println("******학점계산기********");
    System.out.println("\t학번\t"+"중간\t"+"기말\t"+"레포트\t"+"출석\t");
    while((s = bReader.readLine()) != null) {
        String [ ] str;
        str=s.split("\t");
        sum=mj+fj+rj+aj; 
        for (int i = 0; i < str.length; i++) {
            str[i] = str[i].trim();
        }
        Student c=new Student(Integer.parseInt(str[0]),Integer.parseInt(str[1]),Integer.parseInt(str[2]),Integer.parseInt(str[3]),Integer.parseInt(str[4]));
        st.add(c);   
    }
    System.out.println(st);

    while(true) {
    try {
        System.out.println("학생의 정보를 입력하시겠습니까? (y,n)");

Scanner sc=new Scanner(System.in); start=sc.nextLine(); if(start.equalsIgnoreCase("y")) { System.out.println("학생의정보를 입력해주세요"); for(int i=0;i<=st.size();i++) { for(int y=0;y<=5;y++) { switch(y) { case 0://나중에하자 일단 파일 쓰는거부터 ㄱ System.out.println("학번을 입력해주세요"); num=sc.nextInt(); for(int i1=0;i1<=st.size();i1++) { if(st.get(i1).getNum()==num) { System.out.println("학번이 같습니다 ");
}else if(st.get(i1).getNum()!=num) {
} } break; case 1: System.out.println("중간고사 점수를 기입해주세요"); mj=sc.nextInt(); break; case 2: System.out.println("기말고사 점수를 기입해주세요"); fj=sc.nextInt(); break; case 3: System.out.println("레포트 점수를 기입해주세요"); rj=sc.nextInt(); break; case 4: System.out.println("출석점수를 기입해주세요"); aj=sc.nextInt(); break; } } count++; Student c=new Student(num,mj,fj,rj,aj);// 학생 한명 정보 다입력 st.add(c);

            //여기서 출력 하거나 arraylist에 추가해야함
            break;


        }//if y 눌렀을떄가 끝남 
        System.out.println("************학생목록****************");
        System.out.println("학생수:"+count);
        System.out.println(st);

        }
        if(start.equalsIgnoreCase("n")) {
             System.out.println("정보를 수정하시겠습니까?( 1:수정, 2:삭제, 3:종료, 4:학점계산");
             start=sc.nextLine();
        if(start.equalsIgnoreCase("1")) {
            System.out.println("************학생목록****************");
             System.out.println(st);
             System.out.println("수정할 학번의 숫자를 골라주세요");
             int um=sc.nextInt();//비교할 숫자
             for(int i=0;i<st.size();i++){
                 if(st.get(i).getNum()==um){
                  System.out.print("바꾸실 정보를 입력하세요. 0:종료,1:중간 ,2:기말,3:레포트,4:출석");
                  int ans=sc.nextInt();
                 switch(ans){
                    case 0:
                        break;
                    case 1:
                        System.out.println("바꿀 중간고사 점수를 기입해주세요");
                        mj=sc.nextInt();
                        st.get(i).setMj(mj);
                        System.out.println("변경되었습니다.");
                        break;
                    case 2:
                        System.out.println("바꿀 기말고사 점수를 기입해주세요");
                        fj=sc.nextInt();
                        st.get(i).setFj(fj);
                        System.out.println("변경되었습니다.");
                        break;
                    case 3:
                        System.out.println("바꿀 레포트 점수를 기입해주세요");
                        rj=sc.nextInt();
                        st.get(i).setRj(rj);
                        System.out.println("변경되었습니다.");
                        break;
                    case 4:
                        System.out.println("바꿀 출석점수를 기입해주세요");
                        aj=sc.nextInt();
                        st.get(i).setAj(aj);
                        System.out.println("변경되었습니다.");
                        break;
                 }//switch 바꾼거 종ㄹ

        }//if문
             }//for문종료    
             System.out.println(st);
        }//if 문종료(수정)


        if(start.equalsIgnoreCase("2")) {
            System.out.println("************학생목록****************");
             System.out.println(st);
            System.out.println("삭제할 학번을 고르세요");
             Integer um=sc.nextInt();//비교할 숫자
             for(int i=0;i<st.size();i++){
                 if(st.get(i).getNum()==um){
                     System.out.println(um+"의학번의 정보를 삭제했습니다");
                     st.remove(i);
                     count--;
                     break;
                 }//삭제if안에있는문 
             }//삭제for문
        }//if삭제문
        if(start.equalsIgnoreCase("3")) {
            break;
        }
        if(start.equalsIgnoreCase("4")) {
            System.out.println("학점을 계산합니다 ");
            System.out.println("************학생목록****************");
            System.out.println("\t학번\t"+"중간\t"+"기말\t"+"레포트\t"+"출석\t"+"총점\t"+"평균\t"+"학점\t");
            sum=0;
            avg=0;
            totalavg=0;
            for(int i=0;i<st.size();i++) {          
                sum=st.get(i).getMj()+st.get(i).getFj()+st.get(i).getRj()+st.get(i).getAj();
                avg=(sum/4);
                totalavg=totalavg+avg;//전체평균더한거 
            }//전체평균 더한거 나오게하기 
            for(int i=0;i<st.size();i++){
                sum=st.get(i).getMj()+st.get(i).getFj()+st.get(i).getRj()+st.get(i).getAj();
                avg=(sum/4);
                totalhak=totalavg/count;
                if(avg>=totalhak+(totalhak*0.2)) {
                    hak='A';
                }else if(avg>=totalhak && avg<totalhak+(totalhak*0.2)) {
                    hak='B';
                }else if(avg<totalhak && avg>=totalhak-(totalhak*0.2)) {
                    hak='C';
                }else if(avg<totalhak-(totalhak*0.2) && avg>=totalhak-(totalhak*0.2)) {
                    hak='D';
                }else {
                    hak='F';
                }
                Student c=new Student(st.get(i).getNum(),st.get(i).getMj(),st.get(i).getFj(),st.get(i).getRj(),st.get(i).getAj(),sum,avg,hak);
                st2.add(c);
            }
            System.out.println(st2);
        }//4번 종료 
    }//if문 n종료
        }catch (Exception e) {
            System.out.println("다시해봐");
    }
}

} }

st2.add(c)이부분에서 sum,avg,hak이 st2에 들어가지질않는데 이유를 모르겠습니다...알려주세요...

  • 이렇게 소스 코드를 나열해서 질문을 하면 일일이 다 분석해서 답을 달라는 건가요? 최소한 로그를 찍어서 어느 부분까지는 잘 들어가는 데 그 다음부터 안된다던가 하는 노력이 보였으면 합니다. 그리고 미리 작성된 코드를 그대로 타이핑 한게 아니라면 충분히 해결할만한 문제로 보이는데 여러 군데에다가 로그를 찍어가면서 디버깅 하는 방법을 먼저 익혀보는건 어떨까요? 알 수 없는 사용자 2019.9.26 10:08
  • 죄송합니다 디버깅을해도해도 왜안되는지 읽을줄을몰라 그냥 넘어가길래 왜그런지 몰라서 그랬습니다 그리고 다보여주는이유는 저번에 모르는부분만 보여주니까 딸랑 그문제만보여주고 그걸 어떻게 풀어주냐는 가시같은말에 일단 다올리고나서 질문을하자라는 말입니다 근데 이번엔 태평장사꾼님 처럼 이런 가시같이 말하는분이 있네요. 그 밑에 st2.add(c)이부분에서 sum,avg,hak이 st2에 들어가지않는다고 한번더 말은했는데..이게 잘못된방식이 아닌가요?. 아직 질문하는데 익숙치않아서 그렇습니다 다음엔 좀 더 잘해보겠습니다. 박장선 2019.9.27 15:55
  • 가시 같이 말한다라.....분명 저를 포함 해서 조언을 해 주시는 분들은 단순히 질문의 형식이 잘못 되어서 하는 말이 아니라 답변자의 입장을 생각해 보라는 뜻입니다. 옆에서 가르쳐 주는 것이 아니기 때문에 좀 더 정확한 표현을 원하는 것이고 좀 더 정확한 답변을 주고자 어떻게 해줬으면 좋겠다라고 하는 것입니다. 도움을 구하는 입장에서 내가 어떻게 써줘야 답변을 해 줄꺼냐 식의 태도 보다는 제가 이렇게 질문을 드렸는데 도움을 구할 수 있을까요가 되야 하지 않나 싶습니다.. 뭐 그건 그렇고... 제가 되물은 얘기는 단순히 st2.add(c) 부분에 값이 안들어 가는 이유가 for 문을 들어오지 않아서 인지 if문을 들어오지 않아서 인지 위에서 부터 보기 힘들기 때문입니다. if 문이 들어 오지 않았다면 start가 "4"가 아닌 것이고 for문이 돌지 않았다면 st.size() 가 0인 것일 테지요.. 이런 것들의 대한 로그를 위주로 하나씩 접근해 가려는 의도였는데 잘 못 이해 하셨나봅니다. 알 수 없는 사용자 2019.9.27 17:52
  • 그렇군요 제가 질문하는방식의 문제가있었던거같습니다 죄송합니다 .문제는 size()에서 문제가 발생했습니다 해결은 했고요...답변 감사드립니다.. 제가 질문하는 방식의 문제가 있던거 다시한번더 사과드립니다. 박장선 2019.9.27 18:06

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)