Test063~, CircleTest, ~Test068
인스턴스 던전 : 온라인 게임에서 특정 유저 개인이나 집단을 위해 별도로 생성한 지역 출처-네이버 지식백과
※ 지역 변수는 초기화 과정을 거치지 않으면 사용할 수 없다.
-> (즉, 자바가 자동으로 초기화를 수행해 주거나 하지 않는다.)
//Test064.java 와 비교~!!!
public class Test063 //클래스
{
public static void main(String[] args) //메소드
{
// 지역 변수 n
int n;
// -- 선언 후 초기화 과정을 거치지 않은 상태.
System.out.println("n : " + n);
// 에러발생(컴파일 에러)
//variable n might not have been initialized
// 지역 변수 n 에 접근하여 그 값을 출력하고자 하는 구문
}
}
//Test063.java 와 비교~!!!
public class Test064
{
// 전역 변수 a 선언
int a;
// 자동으로 0으로 초기화 지원
// 전역 변수 b 선언
boolean b;
// 전역 변수 c 선언
char c;
// 전역 변수 d 선언
double d;
public static void main(String[] args)
{
// Test064 인스턴스 생성 -> 버퍼드리더처럼 a쓰려면 인스턴스 생성을 해줘야함
Test064 ob = new Test064();
System.out.println("ob.a : " +ob.a);
//==> 0b.a : 0
System.out.println("ob.b : " +ob.b);
//==> ob.b : false //자동으로 0이 들어감
System.out.println("ob.c : "+ob.c);
//==> ob.c : //자동으로 공백
System.out.println("ob.d : "+ob.d);
//==> ob.d : 0.0 //자동으로 0.0
}
}
→ 하나의 자바 파일(.java)에 여러 개 이상의 클래스(class)를 만들 수 있다.
하지만 이 과정에서 『public class』가 붙는 클래스는 하나여야함!!
그리고 파일의 이름은 public이 붙어있는 클래스가 파일명의 된다.
일반적으로 하나의 파일에 하나의 클래스를 설계한다.
또한, 여러 개의 클래스가 설계된 파일을 컴파일하게 되면
내부에 설계된 클래스 수 만큼 클래스 파일(.class)이 파생된다.
실무에서는 하나의 자바파일에는 하나의 클래스 만드는 것이 일반적임
/*
직사각형의 넓이와 둘레 계산, 클래스로 표현
클래스의 정체성 -> 직사각형
클래스의 속성 -> 가로, 세로, (넓이, 둘레, 부피, 무게, 재질, 색깔, ....)
클래스의 기능 -> 넓이 계산, 둘레 계산, 가로세로 입력, 결과 출력
객체를 구성 -> 데이터(속성, 상태) + 기능(동작, 행위)
↓ ↓ ↓
클래스를 설계 -> 변수 + 메소드
class 직사각형
{
// 데이터(속성, 상태) -> 변수
int 가로, 세로;
// 기능(동작, 행위) -> 메소드
가로세로 입력()
{
}
둘레 계산()
{
}
넓이 계산()
{
}
결과 출력()
{
}
}
*/
/*
사용자로부터 임의의 정수를 입력받아
1부터 입력받은 수 까지의 합을 연산하여
결과값을 출력하는 프로그램을 구현한다.
단, 클래스와 인스턴스의 개념을 활용하여 처리할 수 있도록 한다.
또한, 입력 처리 과정에서 BufferedReader를 활용하며,
입력 데이터가 1 보다 작거나 1000 보다 큰 경우
다시 입력받을 수 있는 처리를 포함하여 프로그램을 구현할 수 있도록 한다.
실행 예)
임의의 정수 입력(1~1000) : 1022
임의의 정수 입력(1~1000) : -20
임의의 정수 입력(1~1000) : 100
>> 1 ~ 100 까지의 합 : 5050
계속하려면 아무 키나 누르세요...
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
class Hap
{
int n; //입력받을 정수 값 (전역 변수)
//입력기능
void input() throws IOException
{ //실제 인스턴스를 생성하는 구문 new
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
do
{
System.out.print("임의의 정수 입력(1~1000) : ");
n = Integer.parseInt(br.readLine());
}
while (n<1 || n>1000);
}
//누적합
int cal()
{
// 결과값으로 반환하게 될 변수 선언 및 초기화
int result = 0; //값이 없을 때 초기화해놓으면 에러가 발생안해서 초기화함!
for (int i=1; i<=n;i++ )
{
result += i;
}
// 최종 결과 값 반환
return result;
}
//출력기능
void print(int cal) //결과 출력() -> 누적합 매개변수로 받아줘야함
//메소드의 값을 반환할 수 있는 방법은 return 뿐
//반환 값이 없고 그냥 출력하기때문에 void
{
System.out.printf(">> 1 ~ %d 까지의 합 : %d\n",n,cal);
}
}
public class Test067
{
//예외처리 CircleTest에서도 했지만 main에 나와도
// main안에 CircleTest가 있는 것이므로 여기서도 예외처리 해줘야!
public static void main(String[] args) throws IOException
{
//Hap클래스 인스턴스 생성
Hap ob = new Hap(); ////Hap 메모리를 생성해서 ob라는 참조변수를 만들었음
//생성된 인스턴스 ob를 통해 정수 입력 메소드 호출
ob.input(); //리턴자료형이 void면 = 으로 받을꺼 없음
//생성된 인스턴스 ob를 통해 누적합 연산 메소드 호출
int cal = ob.cal();
//생성된 인스턴스 ob를 통해 출력 메소드 호출
ob.print(cal);
}
}
/*
임의의 정수 입력(1~1000) : 0
임의의 정수 입력(1~1000) : -20
임의의 정수 입력(1~1000) : 1005
임의의 정수 입력(1~1000) : 100
>> 1 ~ 100 까지의 합 : 5050
계속하려면 아무 키나 누르십시오 . . .
*/
import java.io.IOException;
import java.util.Scanner;
class Calculate
{
//주요 변수 선언
int n1, n2; //사용자로부터 입력받은 두 정수를 담아둘 변수
char op; //사용자로부터 입력받은 연산자를 담아둘 변수
Calculate() //생성자(아래 생성자개념 읽고 오기)
//컴파일하는 과정에서 사용자정의 생성자가 없다면 자동으로 삽입이 됨
{
}
void input() throws IOException // System.in.read때문에 사용
{
//int n1, n2; 위에 선언했기 때문에 또해줄 필요없음!!!
//-> 이거때매 계속 >> 0 + 0 = 0.00에러남 -_ㅠ
Scanner sc = new Scanner(System.in);
System.out.print("임의의 두 정수 입력(공백 구분) : "); //Scanner쓰면 토큰을 분할해서 받아올 수 있음
//sc = new Scanner(sc.next()).useDelimiter("\\s*,\\s*");
n1 = sc.nextInt();
n2 = sc.nextInt();
System.out.print("임의의 연산자 입력(+ - * /) : ");
op = (char)System.in.read();
}
double cal()
{
int res=0;
switch(op)
{
case '+' : res = n1 + n2; break;
case '-' : res = n1 - n2; break;
case '*' : res = n1 * n2; break;
case '/' : res = n1 / n2; break;
}
return res;
}
void print(double res)
{
System.out.printf(">> %d %c %d = %.2f\n",n1,op,n2,res);
}
}
public class Test068
{
public static void main(String[] args) throws IOException
{
//Calculate 클래스 인스턴스 생성
Calculate ob = new Calculate();
//Calculate()이걸 정의한적 없는데 데려올수 있어? -> 27번 라인 확인!!
ob.input();
double res = ob.cal();
ob.print(res);
}
}
/*
임의의 두 정수 입력(공백 구분) : 10 5
임의의 연산자 입력(+ - * /) : /
>> 10 / 5 = 2.00
계속하려면 아무 키나 누르십시오 . . .
*/
//객체를 선언한것
Scanner sc = new Scanner();
//인스턴스를 생성
//new Scanner + Scanner();
//얘가 생성자
//Scanner()이걸 정의한적 없는데 데려올수 있어?
//컴파일하는 과정에서 사용자정의 생성자가 없다면 자동으로 삽입이 됨 아래처럼!
/*
Scanner()
{
}
*/
class Number
{
int num;
public Number() //Number()가 생성자!!
{
....
}
}