package com.HomeWork;
class B{
int n1 = 70;
int n2 = 80;
int n3 = 90;
int hap1() {
int hap = n1 + n2 + n3;
return hap;
}
int hap1(int n1, int n2, int n3) {
int hap = n1 + n2 + n3;
return hap;
}
}
public class Bmain {
public static void main(String[] args) {
B a = new B();
int hap = a.hap1();
System.out.println(hap);
hap = a.hap1(50, 60, 70);
System.out.println(hap);
}
}
(2) tot 중심으로 다시 보기 중요한 부분은 this를 사용해서 값을 넣고 그것을 반환했다는 점
package com.HomeWork;
class A
{// 첫번쨰 학생 점수를 담을 변수 선언한다.
// 전변은 유지된다.
int n1 = 70;
int n2 = 80;
int n3 = 90;
int tot = 0;
void hap1() { // 처리하기 부른다 - > 리턴타입 int, 또는 전변을 굳이 지변으로 처리
int tot = n1 + n2 + n3;
this.tot = tot; // ->0-> 240으로 change
//tot는 지변이라서 다른 외부의 클레스에서는 사용이 불가하다.
//해당 부분은 필자가 생각했을 때 return과 같은 역할이다. 단, 전역변수로 선언이 되어 있어야 한다.
}
}
public class Amain {
public static void main(String[] args) {
A a = new A();
System.out.println(a.n1);
a.hap1();
System.out.println(a.tot);
}
}
/*
1. 세 학생의 점수를 입력 받아서 -> 변수 3개가 필요하다. -> 전변으로 할까[지변으로 할까]
2. 타입은 어떻게 구성할까?-> 초기화 생략가능 / 하나의 클래스를 대표하는 값이다.
3.
*/
-----------------------------
70
240
[해당 부분 복습]
package com.HomeWork;
public class Frame1 {
void initDisplay()
{
}
void initDisplay(int width, int height)
{
}
void initDisplay(Double width, Double height)
{
}
void initDjsplay(int width, int height, int isView)
{
}
public static void main(String[] args) {
}
}
(2)
package com.HomeWork;
// 자바에서는 같은 이름의 메소드를 중복 선언할 수 있다.
// 이것을 가능하게 하는 건 메소드 오버로딩과 메소드 오버라이딩이 있다.
// 그 이유는 컨벤션이 있기 때문이다.
/*
* 메소드 오버로딩은 반드시 파라미터의 개수가 다르거나 타입이 달라야한다.
* 리턴타입이 있고 없고는 메소드 오버로딩에 영향이 없다.
*/
class B{
int n1 = 70;
int n2 = 80;
int n3 = 90;
int hap1() {
int hap = n1 + n2 + n3;
return hap;
}
int hap1(int n1, int n2, int n3) {
int hap = n1 + n2 + n3;
return hap;
}
}
public class Bmain {
public static void main(String[] args) {
B a = new B();
int hap = a.hap1();
System.out.println(hap);
hap = a.hap1(50, 60, 70);
System.out.println(hap);
}
}
--------------------------
240
180
(3) 클래스가 3개일 경우
package com.HomeWork;
class C{
int n1 = 70;
int n2 = 80;
int n3 = 90;
}
class C1{
int hap1() {
C c = new C();
int hap = c.n1 + c.n2 + c.n3;
return hap;
}
int hap1(C c ) {
int hap = c.n1 + c.n2 + c.n3;
return hap;
}
}
public class Cmain {
public static void main(String[] args) {
C c = new C();
C1 a = new C1();
int hap = a.hap1();
System.out.println(hap);
c.n1 = 50;
c.n2 = 60;
c.n3 = 50;
hap = a.hap1(c);
System.out.println(hap);
}
}
package com.HomeWork;
public class Z {
int i = 1;
void m1()
{
Z z = new Z();
System.out.println(z.i);
z.m2(z);
System.out.println(z);
}
// 여기에서 6번에 생성된 주소번지를 굳이 사용하고 싶다 어떡하지?
void m2(Z z)
{
System.out.println(z.i);
System.out.println(z);
}
public static void main(String[] args) {
Z i = new Z();
i.m1();
i.m2(i);
/*
* println(i.m1())이 안되는 이유는 return / 반환하는 부분이 없다는 것이다.
*/
}
}
2) Test Case2
package com.HomeWork;
public class Z {
int i = 1;
void m1()
{
Z z = new Z();
System.out.println(z.i);
System.out.println(z);
m2(z);
}
// 여기에서 6번에 생성된 주소번지를 굳이 사용하고 싶다 어떡하지?
void m2(Z z)
{
System.out.println(z);
}
public static void main(String[] args) {
Z i = new Z();
i.m1();
i.m2(i);
/*
* println(i.m1())이 안되는 이유는 return / 반환하는 부분이 없다는 것이다.
*/
}
}
3) 값을 대입하는 경우
package com.HomeWork;
public class Z {
int i = 1;
void m1()
{
Z z = new Z();
Z c = new Z();
System.out.println(z.i);
System.out.println(z);
c = m2(z); //c는 z의 주소번지와 값을 가지고 있다.
System.out.println(c);
}
// 여기에서 6번에 생성된 주소번지를 굳이 사용하고 싶다 어떡하지?
Z m2(Z z)
{
System.out.println(z);
return z;
}
public static void main(String[] args) {
Z i = new Z();
i.m1();
i.m2(i);
/*
* println(i.m1())이 안되는 이유는 return / 반환하는 부분이 없다는 것이다.
*/
}
}
필자는 처음에
void m2(Z z)
{
System.out.println(z);
}
이 부분에서 --> void이면 리턴 할 수 없기 때문에, m1에서 대입하여 사용이 불가능하다. 타입이 있어야 반환 값이 존재하고 값을 넣을 수 있다.
package com.HomeWork;
import java.util.Scanner;
/*
* getFirst 메소드를 선언해서 사용자로 부터 숫자를 입력받는 메소드를 구현해보시오.
*
* */
class E
{
Scanner sc = new Scanner(System.in);
public int getFirst()
{
int num=0;
num = sc.nextInt();
return num; // 전변으로 해야 될까? || 지변으로 해야 될까??
}
}
public class Emain {
public static void main(String[] args) {
E e = new E();
int first = e.getFirst();
System.out.println(first);
}
}
/* 0 ~ 9사이의 임의의 숫자를 채번하고
*
*/
----------------------------------------------
20
20
package com.ABCDEFG;
import java.util.Scanner;
/*
* getFirst 메소드를 선언해서 사용자로 부터 숫자를 입력받는 메소드를 구현해보시오.
*
* Key Point -> 스캐너를 전역변수로 인스턴스화를 한다. [같은 주소번지를 갖는다는점을 잊지말자]
* */
class E
{
Scanner sc = new Scanner(System.in);
public int getFirst()
{
int num=0;
num = sc.nextInt();
return num; // 전변으로 해야 될까? || 지변으로 해야 될까??
}
public int getHap() // 두 수의 합
{
int x, y = 0;
x = sc.nextInt();
y = sc.nextInt();
int hap = 0;
hap = x + y;
return hap;
}
public Double getDivide()
{
double x, y = 0;
x = sc.nextDouble();
y = sc.nextDouble();
double Divide = 0;
Divide = sc.nextDouble();
Divide = x * y / Divide;
return Divide;
}
}
public class Emain {
public static void main(String[] args) {
E e = new E();
int first = e.getFirst();
System.out.println(first);
// 두수의 합을 입력받아 사용한다.
int hap = e.getHap();
System.out.println(hap);
double Divide = e.getDivide();
System.out.println(Divide);
}
}
/* 0 ~ 9사이의 임의의 숫자를 채번하고
*
*/
package com.ABCDEFG;
import java.util.Scanner;
/*
* getFirst 메소드를 선언해서 사용자로 부터 숫자를 입력받는 메소드를 구현해보시오.
*
* Key Point -> 스캐너를 전역변수로 인스턴스화를 한다. [같은 주소번지를 갖는다는점을 잊지말자]
* */
class Ball {
private int value;
public Ball(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
class E
{
Scanner sc = new Scanner(System.in);
Ball[] balls = new Ball[200];
public int getFirst()
{
int num=0;
num = sc.nextInt();
return num; // 전변으로 해야 될까? || 지변으로 해야 될까??
}
public int getHap() // 두 수의 합
{
int x, y = 0;
x = sc.nextInt();
y = sc.nextInt();
int hap = 0;
hap = x + y;
return hap;
}
public Double getDivide()
{
double x, y = 0;
x = sc.nextDouble();
y = sc.nextDouble();
double Divide = 0;
Divide = sc.nextDouble();
Divide = x * y / Divide;
return Divide;
}
public Ball[] getBall()
{
for(int i = 0; i < 200; i++)
{
int userInput = sc.nextInt();
balls[i] = new Ball(userInput);
}
return balls;
}
}
public class Emain {
public static void main(String[] args) {
E e = new E();
int first = e.getFirst();
System.out.println(first);
// 두수의 합을 입력받아 사용한다.
int hap = e.getHap();
System.out.println(hap);
double Divide = e.getDivide();
System.out.println(Divide);
// getBall() 메서드를 호출하여 Ball 배열을 받아옴
Ball[] ballArray = e.getBall();
for (int i = 0; i < ballArray.length; i++) {
System.out.println(ballArray[i].getValue());
}
}
----------------------------------------------------
[input]
10
20
30
---------------------------------------------------
10
20
30
package com.Scan;
import java.util.Random;
public class RandomGame {
int dap = -1;
public void newGame()
{
Random r = new Random();
dap = r.nextInt(10);
}
public String account(int User)
{
String hint = null;
if(dap == User)
{
hint = "정답입니다.";
}
else if(dap > User)
{
hint = "높여라";
}
else if(dap < User)
{
hint = "낮춰라";
}
return hint;
}
/**********************************************************************************
* 판정을 내려주는 메소드 구현하기
* @Param user - 사용자가 숫자를 맞추기 위해서 입력하는 값을 담는 변수다. - 입력할 때마다 바귄다./지역변수
* @return - String 타입 : 힌트를 반환하는 변수 (예시: 높여라 / 낮춰라 / 정답이다.)
**********************************************************************************/
public void messagePrint(int User)
{
System.out.println(account(User));
}
public static void main(String[] args) {
RandomGame rg = new RandomGame();
rg.account(5);
}
}
/* 0-9사이의 임의의 숫자를 채번하고
* 사용자로부터 숫자를 입력 받아서
* 입력받은 숫자가 더 작으면 힌트를 높여라 라고 출력하고
* 더 크면 나줘라 라고 힌트를 주어서 5번까지만 기회를 제공해서 그 숫자를 맞추는 게임을 작성해 보세요.
*
* 새 게임을 선택했을 때는 0~9 사이에 새로운 숫자를 채번해야 한다.
* 채번한 숫자는 dap라는 변수에 저장해둔다.
* 그리고 전역변수로 하는 것이 좋다.
* 왜냐하면 그 게임을 하는 그 사람이 사용하는 동안에는 오직 하나의 객체만 사용하게 되니깐.
*/
package com.step3;
import java.util.Random;
public class RandomGame {
//선언부
//새로 채번된 숫자를 담는다 - 정답이다
int dap = -1;//-1은 end of file 찾아도 없다
//사용자가 입력하는 숫자는 절대로 전변으로 하지 않는다. - 매번 입력할 때 마다 바뀌어야 하니까....
//게임을 하는데 필요한 메소드
//새게임을 누를 때 마다 호출되는 메소드 이다.
//여기서 채번되는 숫자가 정답이므로 노출하지 않는다. - 그래서 나는 전변으로 선언하였다.
public void newGame() {
Random r = new Random();
//리턴 타입이 없어도 전변이면 어떠한 메소드에서도 재정의가 가능하다.
dap = r.nextInt(10);//정답이 결정되었다. - 답이 수시로 변경되면 안된다. - 유지되어야 한다. - 종료될때까지....
}
//판정을 내려주는 메소드를 선언해 보자. - 왜냐면
/************************************************************************************
* 판정을 내려주는 메소드 구현하기
* @param user - 사용자가 숫자를 맞추기 위해서 입력하는 값을 담는 변수이다. - 입력할 때마다 바뀐다. -지변
* @return - String - 힌트를 반환한다(예시: 높여라, 낮춰라, 정답입니다. 축하합니다.)
************************************************************************************/
public String account(int user) {//user -> 매번 화면에 사용자가 입력하고 엔터 쳤을 때 결정되는 값이다.
String hint = null;
if(dap == user) {
hint = "정답입니다.";
}else if(dap > user) {//사용자가 입력한 값이 정답보다 작으면 높여라를 반환해준다.
hint = "높여라.";
}else if(dap < user) {//사용자가 입력한 값이 정답보다 크면 낮춰라를 반환해 준다.
hint = "낮춰라.";
}
return hint;
}
public void messagePrint(int user) {//user = 5복사됨 - call by value
System.out.println(account(user));//24-> 5를 쥐고 간다.-> 높여라 출력
}
public static void main(String[] args) {
RandomGame rg = new RandomGame();
//rg.account(5);
rg.messagePrint(5);
}
}
/*
0~9사이의 임의의 숫자를 채번하고
사용자로 부터 숫자를 입력받아서
입력받은 숫자가 더 작으면 힌트를 높여라 라고 출력하고
더 크면 낮춰라 라고 힌트를 주어서
5번까지만 기회를 제공해서 그 숫자를 맞추는 게임을 작성해 보시오.
새게임을 선택했을 때는 0~9사이에 새로운 숫자를 채번해야 합니다.
채번한 숫자는 dap이라는 변수에 저장해 둡시다.
그리고 전역변수로 하는 것이 좋겠습니다.
왜냐면 그 게임을 하는 그 사람이 사용하는 동안에는 오직 하나의 객체만 사용하게 될 테니까요......
*/
사용자가 입력하는 숫자는 절대로 전변으로 하지 않는다. - 매번 입력할 때 마다 바뀌어야 하니까
여기서 채번되는 숫자가 정답이므로 노출하지 않는다. - 그래서 나는 전변으로 선언하였다.
리턴 타입이 없어도 전변이면 어떠한 메소드에서도 재정의가 가능하다.
r.nextInt(10) : 0~9까지 채번한 것을 리턴한다.
생성자를 통해서 newGame을 따로 호출해야한다
package com.Scan;
import java.util.Random;
public class RandomGame {
int dap = -1;
public RandomGame() {
newGame(); // Call newGame in the constructor to initialize dap with a random number.
}
public void newGame() {
Random r = new Random();
dap = r.nextInt(10);
}
public String account(int User) {
String hint = null;
if (dap == User) {
hint = "This is the correct answer.";
} else if (dap > User) {
hint = "Raise";
} else if (dap < User) {
hint = "Lower";
}
return hint;
}
public void messagePrint(int User) {
System.out.println(account(User));
}
public static void main(String[] args) {
RandomGame rg = new RandomGame();
rg.messagePrint(5); // Use messagePrint instead of account to print the hint.
}
}
이런식으로