프로그래밍

 3198, 1/160 회원가입  로그인  
   imesu
   http://meiyou
   Java array

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6320 [복사]


class Student
{
public String name;
public int age;
    public Student(String Name, int Age)
    {
        name = Name;
        age = Age;
    }
    public String getName()
    {
        return name;
    }
    public int getAge()
    {
        return age;
    }
    public void setName(String Name)
    {
        name = Name;
    }
    public void setAge(int Age)
    {
        age = Age;
    }  
    public String toString()
    {
        return ("Name of Student : " + name + " , Age of Student : " + age);
    }
}
-------------------------------------------------------------------------------------------------------  
1번
-------------------------------------------------------------------------------------------------------  
import java.util.*;
class Main
{
    public static void main ( String[] args )
    {
        Student s1, s2;
        s1 = new Student ("", 0);
        s2 = new Student ("", 0);
        String name1, name2;
        int age1, age2;
        Student [] ST = new Student [5];
        
        System.out.println("What is name");
        Scanner sc1 = new Scanner(System.in);
        name1 = sc1.next();
        s1.setName("Name of Student : " + name1 + " , Age of Student : ");
        System.out.println("What is age");
        Scanner sc2 = new Scanner(System.in);
        age1 = sc2.nextInt();
        s1.setAge(age1);
        
        System.out.println("What is name");
        Scanner sc3 = new Scanner(System.in);
        name2 = sc3.next();
        s2.setName("Name of Student : " + name2 + " , Age of Student : ");
        System.out.println("What is age");
        Scanner sc4 = new Scanner(System.in);
        age2 = sc4.nextInt();
        s2.setAge(age2);
        
    for (int i=0; i<ST.length; i++) {
        ST[0] = (s1);
        
    }
    for (int i=0; i<ST.length; i++) {
        ST[1] = (s2);
    }
     System.out.println("Student info:");
     System.out.println(ST[0].toString());
     System.out.println("Student info:");
     System.out.print(ST[1].toString());
}
}
-------------------------------------------------------------------------------------------------------  
2번
-------------------------------------------------------------------------------------------------------
import java.util.*;
class fourthmain
{
    public static void main ( String[] args )
    {
        Student s1;
        s1 = new Student ("", 0);
        String name1;
        int age1;
        Student [] ST = new Student [3];
        int H = 0;
        String N = ("");
    for (int i=0; i<ST.length; i++) {
        aw wdST[0] = (s1);
        System.out.println("What is name");
        Scanner sc = new Scanner(System.in);
        name1 = sc.next();
        s1.setName(name1);
        System.out.println("What is age");
        Scanner sc1 = new Scanner(System.in);
        age1 = sc1.nextInt();
        s1.setAge(age1);
        if (H <=age1) {
            H = age1;
            N = name1;
        }
    }
    System.out.println("Student info:");
    System.out.println(ST[0].toString());
    System.out.println("Student info:");
    System.out.println(ST[1].toString());
    System.out.println("Oldest person is : " + N + " ,with the age of " + H);
    
}
}

-------------------------------------------------------------------------------------------------------  
-------------------------------------------------------------------------------------------------------  
일단 student class를 만들고 main을 만들었는데
student에서 tostring으로 name + age를 아웃풋 할 수 있게하고
main에서 s1 즉 name+age를 가진 값을 만들었는데 1번 프로그램으로하면 잘되는데

System.out.println("What is name");
        Scanner sc1 = new Scanner(System.in);
        name1 = sc1.next();
        s1.setName("Name of Student : " + name1 + " , Age of Student : ");
        System.out.println("What is age");
        Scanner sc2 = new Scanner(System.in);
        age1 = sc2.nextInt();
        s1.setAge(age1);

부분을 loop안에 넣으면 아웃풋이
  
What is name
rick
What is age
13
What is name
anto
What is age
15
What is name
jeff
What is age
18
Student info:
Name of Student : Name of Student : jeff , Age of Student :  , Age of Student : 18
Student info:
Name of Student : Name of Student : jeff , Age of Student :  , Age of Student : 18
Student info:
Name of Student : Name of Student : jeff , Age of Student :  , Age of Student : 18
Name is jeffage is 18

이렇게 되여 그러니깐 student info에 나오는 student이름이랑 나이가 마지막에 넣었던 값이에요

arrary ST[0],ST[1],ST[2]가 각각 나와야 하는데 왜 이렇게 나오는 거죠??


  Hit : 5107     Date : 2013/03/28 12:11



    
youngim0405 답변 드리기 전에 코드가 약간 복잡하고 기네요. Array를 막 접하셨나봐요. ㅎㅎ
Array...몇번밖에 훑어 보지 않으셨다면 복잡할만합니다.
일단 메수? 님께서 1번 코드와 2번 코드의 다른점을 깨달아셨으면 합니다.
1번 코드에서는 Array 타입이 클래스이고, 출력할때는 ST[0], ST[1], ST[2] 이런식으로 인덱스를 찾아서 출력하셨습니다
2번 코드의 for문에서 ST[0].setName, ST[0].setAge 처럼 각각의 인덱스에 이름과 나이를 입력해야합니다.
하지만 2번 코드에서는 클래스 안에있는 함수를 통해 클래스 변수에 값만 입력했지 ST[0]의 name 이 rick이 되고, ST[0]의 Age 가 13이 되라고 되어있는 코드가 없습니다.

즉, 메수님께서 짜신 코드는 세번째로 반복할때, 마지막으로 입력된 jeff 와 18 만 기억되서 for문 밖에있는 .toString에서 ST[0]과 ST[1]에 jeff 와 18 이 각각 이름과 나이로 들어간거죠
2013/03/29  
youngim0405 한가지 팁을 말씀드리자면 꼭 필요한 경우가 아닌경우에 스캐너를 많이 사용할 필요는 없습니다.
스캐너 하나로 ST[0]을 위한 이름과 나이, ST[1]을 위한 이름과 나이....다 사용할수있습니다.

제가 드릴수있는 최선의 힌트는:
ST[i].setName(s1);

저도 초보 프로그래머이지만 질문에 도움이 되었으면 하네요.
더 나은 답변이 후에 추가되면 좋겠네요
2013/03/29