
Test096~Test099
public class test
{
int iv; // 인스턴스 변수
static int cv; // 클래스 변수
void method()
{
int lv; // 지역 변수
}
}
public class hyodii096
{
static int a = 10;
int b = 20;
void write()
{
System.out.println("클래스 변수 a : " + a);
System.out.println("인스턴스 변수 b : " + b);
}
static void print()
{
System.out.println("클래스 변수 a : " + a);
//System.out.println("인스턴스 변수 b : " +b); //접근 불가능
}
public static void main(String[] args)
{
System.out.println("main() -> 클래스 변수 a : " + hyodii096.a);
System.out.println("main() -> 클래스 변수 a : " + a);
hyodii096.print();
print();
//System.out.println("main() -> 인스턴스 변수 b : " + b); //접근 불가능
//hyodii096.write(); //접근 불가능
hyodii096 ob = new hyodii096();
System.out.println("main() -> 인스턴스 변수 b : " + ob.b);
ob.write();
System.out.println("main() -> 클래스 변수 a : " +ob.a);
ob.print();
//3가지 방법 --- 2번째가 일반적임
System.out.println("main() -> 클래스 변수 a : " + a);
System.out.println("main() -> 클래스 변수 a : " + hyodii096.a);
System.out.println("main() -> 클래스 별수 a : " + ob.a);
hyodii096 ob2 = new hyodii096();
ob2.a = 10000;
ob2.b = 20000;
System.out.println("ob2확인 ---------------------------");
ob2.write();
ob2.print();
System.out.println();
System.out.println("ob확인 ---------------------------");
ob.write();
ob.print();
}
}
public class Test096
{
// ※ 클래스 변수 또는 클래스 메소드는
// 클래스 정보가 로딩되는 순간 메모리 할당이 이루어지며
// 클래스 이름 또는 객체(인스턴스)를 통해 전근할 수 있다.
// 즉, 『new』연산자를 통해 메모리를 할당받지 않아도
// 사용이 가능하다는 것이다.
static int a = 10; //-- static 변수(클래스 변수) class 변수
// ※ 인스턴스 변수 또는 인스턴스 메소드는
// 동일한 클래스의 메소드에서는 바로 접근하는 것이 가능하지만
// 클래스 메소드에서는 접근할 수 없다.
int b = 20; //-- non-static 변수(인스턴스 변수) instance 변수
void write() //-- non- static 메소드(인스턴스 메소드) instance 메소드
{
System.out.println("클래스 변수 a : " + a); //접근가능
System.out.println("인스턴스 변수 b : " + b); //접근가능
}
static void print() //--static 메소드(인스턴스 메소드) instance 메소드
{
System.out.println("클래스 변수 a : " + a); //접근가능
//System.out.println("인스턴스 변수 b : " + b); //접근불가능 에러발생(컴파일 에러)
}
public static void main(String[] args)
{
System.out.println("main() -> 클래스 변수 a : " + Test096.a); //이게 바람직함!
//-- 클래스 변수에 접근하기 위해서는
// 『클래스명.변수명』 의 형태로
// 클래스의 이름을 통해 접근하는 것이 가능하다.
//--==>> main() -> 클래스 변수 a : 10
System.out.println("main() -> 클래스 변수 a : " + a); //메인도 스태틱 a도 스태틱
//--==>> main() -> 클래스 변수 a : 10
//-- 같은 클래스 내부에 존재하기 때문에
// 클래스의 이름을 생략하는 것이 가능하다.
Test096.print();
print();
//--==>> 클래스 변수 a : 10
// 클래스 변수 a : 10
//-- 클래스 메소드에서 클래스 메소드의 호출은 가능하며,
// 『클래스명.메소드명()』의 형태로 접근하여 호출하는 것이 가능하다.
// 또한, 지금은 같은 클래스 내부에 존재하기 때문에
// 클래스의 이름을 생략하는 것이 가능하다.
//System.out.println("main() -> 인스턴스 변수 b : " + b);
//--==>> 에러발생(컴파일 에러)
//System.out.println("main() -> 인스턴스 변수 b : " + Test096.b);
//--==>> 에러발생(컴파일 에러)
//Test096.write();
//--==>> 에러발생(컴파일 에러)
//write();
//--==>> 에러발생(컴파일 에러)
// Test096 클래스 기반 인스턴스 생성
Test096 ob = new Test096();
//System.out.println("main() -> 인스턴스 변수 b : " + b); //인스턴스를 통해서 접근해야함
//--==>> 에러발생(컴파일 에러)
//생성된 인스턴스를 통한 인스턴스 변수 접근
System.out.println("main() -> 인스턴스 변수 b : " + ob.b);
//--==>> main() -> 인스턴스 변수 b : 20
//생성된 인스턴스를 통한 인스턴스 메소드 접근(호출)
ob.write();
//--==>> 클래스 변수 a : 10
// 인스턴스스 변수 b : 20
// 생성된 인스턴스를 통한 클래스 변수 접근
System.out.println("main() -> 클래스 변수 a : " + ob.a);
//--==>> main() -> 클래스 변수 a : 10
//생성된 인스턴스를 통한 인스턴스 메소드 접근(호출)
ob.print();
//--==>> 클래스 변수 a : 10
// ※ 클래스 변수나 클래스 메소드는
// 『생성된인스턴스명.변수명』
// 『생성된인스턴스명.메소드명()』
// 의 형태로도 접근(호출)이 가능하지만
// 『클래스명.변수명』 --------(일반적)
// 『클래스명.메소드명()』
// 의 형태로 접근(호출)하는 것이 일반적인다.
System.out.println("main() -> 클래스 변수 a : " + a);
System.out.println("main() -> 클래스 변수 a : " + Test096.a); //----(일반적)
System.out.println("main() -> 클래스 변수 a : " + ob.a);
//--==>>main() -> 클래스 변수 a : 10
// main() -> 클래스 변수 a : 10
// main() -> 클래스 변수 a : 10
//----------여기까지 탄생 시점을 기반으로 접근 가능여부 확인
System.out.println(); //개행
//Test096 클래스 기반 인스턴스 생성
Test096 ob2 = new Test096();
ob2.a = 10000; //-- 클래스 변수 초기화 (스테이플러)
ob2.b = 20000; //-- 인스턴스 변수 초기화 (스테이플러)
System.out.println("ob2확인 -------------------------");
ob2.write();
ob2.print();
//--==>> ob2확인 -------------------------
// 클래스 변수 a : 10000
// 인스턴스 변수 b : 20000
// 클래스 변수 a : 10000
System.out.println();
System.out.println("ob확인 -------------------------");
ob.write();
ob.print();
//--==>> ob확인 -------------------------
// 클래스 변수 a : 10000
// 인스턴스 변수 b : 20
// 클래스 변수 a : 10000
}
}
// 1. record 클래스
// - 속성만 존재하는 클래스로 설계할 것~!!
public class Record
{
// 학생 한 명을 표현할 수 있는 속성들로 구성~!!! check~!!!
String name; //--이름
//int kor, eng, mat; //-- 각 과목의 점수(국어, 영어, 수학)
int[] score = new int[3]; // score[0] = 국어, score[1] = 영어, score[2] = 수학
int tot; //--총점
double avg; //--평균
int rank; //--석차(등수)
}
/*
2. Sungjuk 클래스
- 인원 수를 입력받아, 입력받은 인원 수 만큼
이름, 국어점수, 영어점수, 수학점수를 입력받고
총점과 평균을 산출하는 클래스로 설계할 것~!!!
* 속성 : 인원수, record 형태의 배열
* 기능 : 인원 수 입력, 상세 데이터 입력, 총점 및 평균 연산, 결과 출력
*/
import java.util.Scanner;
public class Sungjuk
{
// 주요 속성 구성(주요 변수 선언)
int inwon; //-- 인원 수
Record[] rec; //-- Record 배열(학생 한 명 당 Record 배열 방 한 개 활용)
// Record 를 기반으로 생성된 객체만 담아낼 수 있는 배열
// 주요 메소드 정의(기능 구성)
// 1. 인원 수 입력
public void set()
{
Scanner sc = new Scanner(System.in);
do
{
System.out.print("인원 수 입력(1~100) : ");
inwon = sc.nextInt();
}
while (inwon<1 || inwon>100);
// check~!!!
// Record 클래스를 기반으로 생성된 객체(인스턴스)를 담을 수 있는
// 배열방을 inwon 만큼 생성
//record [] rec = new record[inwon];
rec = new Record[inwon];
//-- Record 배열방을 inwon 만큼 생성한 것이지
// Record 클래스의 인스턴스를 생성한 것은 아니다. (학생이 앉을수있는 좌석(틀)을 만든것이고 학생을 만든건 아님)
}
// 주요 메소드 정의(기능 구성)
// 2. 상세 데이터 입력(총점 및 평균 산출 기능 포함)
public void input() //입력받은 값을 rec 배열방에 넣을 것
{
Scanner sc = new Scanner(System.in);
String[] title = {"국어 점수 : ", "영어 점수 : ", "수학 점수 : "};
// 인원 수 만큼 반복 -> 인원 수에 기반하여 만들어진 배열의 길이만큼 반복
for (int i=0; i<inwon; i++) // for(int i=0; i<rec.length; i++) 같은의미 // 웅~~!!!!
{
//check~!!!
// Record 클래스 기반의 인스턴스 생성
/* 한번 씩 돌때마다 Record의 인스턴스를 생성해야함
Record ob = new Record(); //-- ⓐ
ob.name
ob.tot
rec[i] = ob;
rec[i].name
rec[i].tot
*/
//rec[i] = new record(); // 인스턴스 생성구문... 위의 ⓐ 처럼... 클래스 이름 대문자
rec[i] = new Record();
System.out.printf("%d번째 학생의 이름 입력 : ", (i+1));
rec[i].name = sc.next();
/*
System.out.printf("%d번째 학생의 이름 입력 : ",(i+1));
//rec배열의i번째방의 이름 = sc.next();
rec[i].name = sc.next();
System.out.print("국어 점수 : ");
//rec배열의i번째방의 국어 = sc.nextInt();
rec[i].kor = sc.nextInt();
System.out.print("영어 점수 : ");
//rec배열의i번째방의 영어 = sc.nextInt();
rec[i].eng = sc.nextInt();
System.out.print("수학 점수 : ");
//rec배열의i번째방의 수학 = sc.nextInt();
rec[i].mat = sc.nextInt();
*/
for (int j=0; j<title.length; j++) //숑숑숑 0 1 2 // 쑝~~!!!
{
// 안내 메세지 출력
System.out.print(title[j]);
// 배열 이름 스코어(score)
//사용자가 입력한 데이터를 스코어(score) 배열에 담아내기
//rec[i].sore[j] = sc.nextInt(); // i번째 학생의 score[0] -> 국어점수
rec[i].score[j] = sc.nextInt(); // i번째 학생의 score[1] -> 영어점수
// i번째 학생의 score[2] -> 수학점수
// 국어, 영어, 수학 점수 데이터를 반복적으로 입력받는 동안
//총점 누적하기
rec[i].tot += rec[i].score[j];
}
// 평균 산출하기
rec[i].avg = rec[i].tot / 3.0;
}
}//end input()
// 주요 메소드 정의(기능 구성)
// 3. 결과 출력
//정효진 90 80 70 240 xx.xx 2
//가나다 82 72 62 xxx xx.xx 3
//라마바 98 88 78 xxx xx.xx 1
public void print()
{
System.out.println(); //개행
// 학생 한 명 당 반복 출력구문 구성
for (int i=0; i<inwon; i++) // 웅~!!!
{
//check~!!!!
// 석차 산출 메소드 호출~!!!(구문 추가)
ranking();
//이름 출력
System.out.printf("%5s", rec[i].name);
// 성적(국어, 영어, 수학) 반복 출력
for (int j=0; j<3; j++) // 쑝~0!!!
System.out.printf("%4d", rec[i].score[j]);
// 총점, 평균 출력
System.out.printf("%5d", rec[i].tot);
System.out.printf("%8.2f", rec[i].avg);
//check~!!!!
// 석차 출력구문 추가~!!!
System.out.printf("%5d", rec[i].rank);
// 개행
System.out.println();
}//end outter for문
}//end print
//4. 석차 산출 메소드 추가~!!!
// - Record 배열의 rank 속성 초기화 기능 -> 반환 자료형 void
// - 클래스 내부에서 활용할 메소드로 정의 -> 접근제어 지시자 private
private void ranking()
{
int i,j; //--루프 변수
// 모든 학생들의 등수(석차, rank)를 1로 초기화
for (i=0; i<inwon; i++)
{
rec[i].rank = 1; //처음에는 전부 1로 세팅하고 비교해서 작으면 1더하기 해줄 것임
}
// 등수 산출....ex) 4명
for (i=0; i<inwon-1; i++) //-- 비교 기준 0 1 2(인원 -1(마지막사람까지 비교안해도되니까!))
{
for (j=i+1; j<inwon; j++) //-- 비교 대상 123 23 3
{
if (rec[i].avg > rec[j].avg) //-- 비교 기준의 평균이 비교대상의 평균보다 크다면.....
{
//-- 비교대상의 rank를 1만큼 증가
rec[j].rank++;
}
else if (rec[j].avg > rec[i].avg) //-- 비교대상의 평균이 비교기준의 평균보다 크다면...
{
//-- 비교기준의 rank를 1만큼 증가
rec[i].rank++;
}
}
}
}//end ranking
}//end class Sungjuk
3. Test097 클래스
-main() 메소드가 존재하는 외부 클래스로 설계할 것~!!!
실행 예)
인원 수 입력(1~100) : 102
인원 수 입력(1~100) : -10
인원 수 입력(1~100) : 3
1번째 학생의 이름 입력 : 정효진
국어 점수 : 90
영어 점수 : 80
수학 점수 : 70
2번째 학생의 이름 입력 : 가나다
국어 점수 : 82
영어 점수 : 72
수학 점수 : 62
3번째 학생의 이름 입력 : 라마바
국어 점수 : 98
영어 점수 : 88
수학 점수 : 78
정효진 90 80 70 240 xx.xx 2
가나다 82 72 62 xxx xx.xx 3
라마바 98 88 78 xxx xx.xx 1
계속하려면 .....
*/
public class Test097
{
public static void main(String[] args)
{
Sungjuk ob = new Sungjuk();
ob.set();
//ob.intput();
ob.input();
ob.print();
}
}
/*
인원 수 입력(1~100) : 3
1번째 학생의 이름 입력 : 김연경
국어 점수 : 90
영어 점수 : 97
수학 점수 : 84
2번째 학생의 이름 입력 : 황선우
국어 점수 : 95
영어 점수 : 62
수학 점수 : 84
3번째 학생의 이름 입력 : 안산
국어 점수 : 100
영어 점수 : 97
수학 점수 : 88
김연경 90 97 84 271 90.33 2
황선우 95 62 84 241 80.33 3
안산 100 97 88 285 95.00 1
계속하려면 아무 키나 누르십시오 . . .
*/
/*
1 ~ 3 사이의 난수를 발생시켜서
가위, 바위, 보 게임 프로그램을 구현한다.
단, 클래스의 개념을 활용하여 처리할 수 있도록 한다.
또한, 배열을 활용하여 처리할 수 있도록 한다.
최종적으로 RpsGame 클래스를 완성할 수 있도록 한다.
※ 기준 데이터 -> 1:가위, 2:바위, 3:보
가위 바위 보를 배열에 넣으면 됨
실행 예)
1:가위 2:바위 3:보 중 입력(1~3) : 4
1:가위 2:바위 3:보 중 입력(1~3) : -2
1:가위 2:바위 3:보 중 입력(1~3) : 2
-유저 : 바위
-컴퓨터 : 보
>> 승부 최종 결과 : 컴퓨터가 이겼습니다~!!!
계속하려면...
*/
import java.util.Scanner;
import java.util.Random;
class RpsGame
{
private int user;
private int com;
private void runCome()
{
Random rd = new Random();
com = rd.nextInt(3)+1;
}
public void input()
{
runCome();
Scanner sc = new Scanner(System.in);
do
{
System.out.print("1:가위 2:바위 3:보 중 입력(1~3) : ");
user = sc.nextInt();
}
while (user<1 || user>3);
}
public void middleCalc()
{
String[] str = {"가위", "바위", "보"}; //--check~!!!
System.out.println();
System.out.println("- 유 저 : " + str[user-1]);
System.out.println("- 컴퓨터 : " + str[com-1]);
System.out.println();
}
public String resultCalc()
{
String result = "무승부입니다.";
if (user==1 && com==3 || user==2 && com==1 || user==3 && com==2)
result = "당신이 이겼습니다~!!!";
else if(user==1 && com==2 || user==2 && com==3 ||user==3 && com==1)
result = "컴퓨터가 이겼습니다~ㅠㅠ";
return result;
}
public void print(String str)
{
System.out.println(">> 승부 최종 결과 : " + str);
}
}
public class hyodii098
{
public static void main(String[] args)
{
RpsGame ob = new RpsGame();
ob.input();
ob.middleCalc();
String result = ob.resultCalc();
ob.print(result);
}
}
import java.util.Random;
import java.util.Scanner;
class RpsGame
{
private int user;
private int com;
private void runCome() // 컴퓨터의 가위바위보
{
Random rd = new Random();
com = rd.nextInt(3)+1; //-- 0 1 2 -> 1 2 3
}
public void input() // 사용자의 가위바위보
{
runCome();
Scanner sc = new Scanner(System.in);
do
{
System.out.print("1:가위 2:바위 3:보 중 입력(1~3) : ");
user = sc.nextInt();
}
while (user<1 || user>3);
}//end input()
//중간결과 출력해주는 메소드
public void middleCalc()
{
String[] str = {"가위", "바위", "보"};
System.out.println();
//System.out.println("- 유저 : " + user); //이러면 숫자가 출력됨
System.out.println("- 유저 : " + str[user-1]); //str[1] str[2] str[3] ----check~!!!
System.out.println("- 컴퓨터 : " + str[com-1]); //인덱스값이 0인데 가위바위보는 1 2 3으로 되어있으니까 -1 해줘야함!!
System.out.println();
}
//승부에 대한 결과 연산
public String resultCalc()
{
String result = "무승부입니다.";
if (user==1 && com==3 || user==2 && com==1 || user==3 && com==2) // 사용자가 승리한 상황
result = "당신이 이겼습니다~!!!";
else if(user==1 && com==2 || user==2 && com==3 ||user==3 && com==1) // 컴퓨터가 승리한 상황
result = "컴퓨터가 이겼습니다~ㅠㅠ";
return result;
}//end resultCalc()
//최종 결과 출력
public void print(String str)
{
System.out.println(">> 승부 최종 결과 : " + str);
}
/*----------------------------------------------------------------------
//[내가 푼 코드]
String[] rps = {"가위","바위","보"};
public void set()
{
Scanner sc = new Scanner(System.in);
Random rd = new Random();
com = rd.nextInt(3)+1;
do
{
System.out.print("1:가위 2:바위 3:보 중 입력(1~3) : ");
user = sc.nextInt();
}
while (user<1 || user>3);
}
public void input()
{
System.out.println();
System.out.println("-유저 : " + rps[user-1]); //인덱스값이 0인데 가위바위보는 1 2 3으로 되어있으니까
System.out.println("-컴퓨터 : " + rps[com-1]);
System.out.println();
}
public void print()
{
String result;
result = "무승부";
if (user==1 && com==3 || user==2 && com==1 || user==3 && com==2)
result = "유저가 이겼습니다~!!!";
if(user==1 && com==2 || user==2 && com==3 ||user==3 && com==1)
result = "컴퓨터가 이겼습니다~!!!";
System.out.println(">> 승부 최종 결과 : " + result);
}
-------------------------------------------------------------------*/
}
//main() 메소드를 포함하고 있는 외부의 다른 클래스
public class Test098
{
public static void main(String[] args)
{
/*----------------------------------------------------------------------
RpsGame ob = new RpsGame();
ob.set();
ob.input();
ob.print();
-------------------------------------------------------------------*/
RpsGame ob = new RpsGame();
ob.input();
ob.middleCalc();
String result = ob.resultCalc();
ob.print(result);
}
}
/*
1:가위 2:바위 3:보 중 입력(1~3) : 1
- 유저 : 가위
- 컴퓨터 : 보
>> 승부 최종 결과 : 당신이 이겼습니다~!!!
계속하려면 아무 키나 누르십시오 . . .
1:가위 2:바위 3:보 중 입력(1~3) : 2
- 유저 : 바위
- 컴퓨터 : 보
>> 승부 최종 결과 : 컴퓨터가 이겼습니다~ㅠㅠ
계속하려면 아무 키나 누르십시오 . . .
1:가위 2:바위 3:보 중 입력(1~3) : 3
- 유저 : 보
- 컴퓨터 : 보
>> 승부 최종 결과 : 무승부입니다.
계속하려면 아무 키나 누르십시오 . . .
*/