package superCode;
import java.util.Scanner;
//1. id를 입력받아 joinId와 일치할 경우에만 pw를 입력할 수 있다.
//2. id를 틀린 경우, "ID를 확인해주세요."라는 메세지를 출력
//3. pw가 틀린 경우, "PW를 확인해주세요."라는 메세지를 출력
//4. id와 pw가 모두 일치하는 경우, "로그인 성공입니다."라는 메세지를 출력
public class Join_if_if {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//임의 계정 정보
int joinId = 1234;
int joinPw = 1111;
//사용한태 아이디 입력 요청
System.out.println("아이디를 입력하세요>");
int myId = scan.nextInt();
// 아이디 입력 정보 맞으면 밑에 if문 실행
if(joinId == myId) {
System.out.println("비밀번호를 입력하세요.");
int myPw = scan.nextInt();
// 비밀번호까지 맞으면 밑에 if문 실행
if (joinPw == myPw) {
System.out.println("로그인 성공");
}
// 비밀번호 틀리시 밑에 if문 실행
if (joinPw != myPw) {
System.out.println("비밀번호를 확인해주세요.");
}
}
//처음부터 아이디 틀리시 밑에 if문 실행
if(joinId != myId) {
System.out.println("아이디를 확인해주세요.");
}
}
}
입력한 날짜가 유효한 범위인 경우, 입력한 날짜에 대해 switch 문을 사용하여 요일을 판별
각 case에 따라 해당하는 요일과 주중 또는 주말 여부를 출력
package one002;
import java.util.Scanner;
public class SevenMonth {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int day;
System.out.print("2023년 5월 날짜 입력: ");
do {
day = sc.nextInt();
if (day >= 1 && day <= 31) {
switch (day % 7) {
case 1:
System.out.println("월요일");
System.out.println("주중입니다.");
break;
case 2:
System.out.println("화요일");
System.out.println("주중입니다.");
break;
case 3:
System.out.println("수요일");
System.out.println("주중입니다.");
break;
case 4:
System.out.println("목요일");
System.out.println("주중입니다.");
break;
case 5:
System.out.println("금요일");
System.out.println("주중입니다.");
break;
case 6:
System.out.println("토요일");
System.out.println("주말입니다.");
break;
case 7:
System.out.println("일요일");
System.out.println("주말입니다.");
break;
}
} else {
System.out.println("1 ~ 31 사이의 값을 입력하세요.");
}
} while (day >= 32);
}
}
메소드는 리턴값이 있을 수도 있고 없을 수도 있으나 리턴값이 있을 경우 리턴 타입이 선언부에 명시
리턴값이 없는 메소드는 리턴 타입에 void 기술
리턴값이 있는 메소드는 리턴값의 타입을 기술
클래쓰
void powerOn() {...};
double divide( int x, int y ) {...};
메인 ( 호출 )
powerOn(); // 매개변수 필요x
double result = divide( 10, 20 ); // 매개변수 필요O
int result = divide( 10, 29 ) // 컴파일 에러 int -> double로 변경해야 됨
메소드 이름
숫자로 시작 x, 관례적으로 메소드 이름은 소문자, 다른 단어 혼합시 뒤이어 오는 단어 첫 글자 대문자
잘 작성된 메소드 이름
void run(){...};
void startEngine(){...};
String getName(){...};
int[] getScores(){...};
매개 변수 선언
매개 변수는 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용
매개 변수가 있는 divide() 메소드 선언
double divide( int x, int y ) {...};
매개 변수가 있는 divide() 메소드 호출
double result = divide ( 10, 20 );
//선언과 동일하게 매개 변수 값을 2개면 2개를 호출
double result = divide ( 10.5, 20.0 ); // 에러
10.5와 20.0은 double 값이므로 int 타입으로 변환 불가라 에러
byte b1 = 10;
byte b2 = 20;
double result = divide ( b1, b2 );
byte는 int로 자동 타입 변환되기 때문에 컴파일 에러 안남
클래스 ( 메소드 선언 )
package sec02.exam03;
public class Calculator {
// 필드
int x;
int y;
//생성자
Calculator(int x, int y) { //지역변수
this.x = x;
this.y = y;
}
void powerOn() {
System.out.println("전원을 켭니다.");
}
int plus() {
return x + y; //인스턴스변수
}
double divide() { //지역변수
double result = (double)x / (double)y;
return result;
}
// 필드값 초기화
void setX(int x) {
this.x = x;
}
void setY(int y) {
this.y = y;
}
int getX() {
return x;
}
// x,y 값을 읽어옴
int getY() {
return y;
}
void powerOff() {
System.out.println("전원을 끕니다.");
}
}
main( 메소드 호출 )
package sec02.exam03;
public class CalculatorExample {
public static void main(String[] args) {
Calculator myCalc = new Calculator(5, 6);
myCalc.powerOn();
int result1 = myCalc.plus();
System.out.println("result1=" + result1);
// byte x = 10;
// byte y = 4;
// double result2 = myCalc.divide(x, y);
myCalc.x = 10;
myCalc.y = 3;
double result2 = myCalc.divide();
System.out.println("result2=" + result2);
myCalc.setX(10);
myCalc.setY(3);
double result3 = myCalc.divide();
System.out.println("x= " + myCalc.getX());
System.out.println("y= " + myCalc.getY());
myCalc.powerOff();
}
}
매개 변수의 개수를 모를 경우
메소드의 매개 변수는 개수가 이미 정해져 있는 것이 일반적이지만,
어떤 상황에서는 메서드를 선언 할 때 매개 변수의 개수를 알 수 없는 경우도 존재
예를 들어 여러 개의 수를 모두 합산하는 메소드를 선언해야 한다면 몇 개의 매개 변수가
입력될지 알 수 없기 때문에 매개 변수의 개수를 결정 할 수 없을 것이다.
해결책은 매개 변수를 배열 타입으로 선언하는 것
매개 변수를 배열 타입으로 선언
int sum1(int [] values){ }
sum1() 메소드를 호출할 때 배열을 넘겨줌으로써 배열의 항목 값들을 모두 전달 가능
배열의 항목 수는 호출할 때 결정하면 됨
int[] values = {1, 2, 3};
int result = sum1(values);
int result = sum1(new int[](1,2,3,4,5));
매개 변수를 배열 타입으로 선언하면 메소드를 호출하기 전에 배열을 생성해야 하는 불편한 점이 있음
클래스 선언
package sec02.exam03;
public class Computer {
//// 매개 변수의 개수를 모를 경우 ( 선언 )
int sum1(int[] values) {
int sum = 0;
for(int i=0; i<values.length; i++) {
sum += values[i];
}
return sum;
}
int sum2(int ... values) {
int sum = 0;
for(int i=0; i<values.length; i++) {
sum += values[i];
}
return sum;
}
}
maint ( 호출 )
package sec02.exam03;
import java.security.PublicKey;
public class ComputerExample {
public static void main(String[] args) {
// 매개 변수의 개수를 모를 경우 ( 호출 )
Computer myCom = new Computer();
int[] values1 = {1, 2, 3};
int[] arr = new int[]{1, 2, 3};
int[] arr2 = new int[3];
arr[0] = 1; arr[1] = 2; arr[2] = 3;
int result1 = myCom.sum1(values1);
System.out.println("result1 = " + result1);
int result2 = myCom.sum1(new int[] {1,2,3,4,5});
System.out.println("result2 =" + result2);
int result3 = myCom.sum2(1, 2, 3);
System.out.println("result = " + result3);
int result4 = myCom.sum2(1, 2, 3, 4, 5);
System.out.println("result4 = " + result4);
}
}
실습
Student 클래스 활용 배열에 학생수 입력 후 국어, 영어, 수학 출력 ( main 출력 )
package sec04.exam02;
import java.util.Scanner;
public class StuEx {
public static void main(String[] args) {
boolean run = true;
int korTot = 0;
int engTot = 0;
int mathTot = 0;
double avgTot = 0.0;
int korMax = 0;
int engMax = 0;
int mathMax = 0;
String kMaxName = null;
String eMaxName = null;
String mMaxName = null;
Scanner scanner = new Scanner(System.in);
System.out.print("학생 수>");
int num = Integer.parseInt(scanner.nextLine());
Student[] students = new Student[num];
for (int i=0; i <students.length; i++) {
System.out.print("이름>");
String name = scanner.nextLine();
System.out.print("국어>");
int kor = Integer.parseInt(scanner.nextLine());
System.out.print("영어>");
int eng = Integer.parseInt(scanner.nextLine());
System.out.print("수학>");
int math = Integer.parseInt(scanner.nextLine());
korTot += kor;
engTot += eng;
mathTot += math;
students[i] = new Student(name, kor, eng, math);
if (korMax < students[i].kor) {
korMax = kor;
kMaxName = students[i].name;
}
if (engMax < students[i].eng) {
engMax = eng;
eMaxName = students[i].name;
}
if (mathMax < students[i].math) {
mathMax = math;
mMaxName = students[i].name;
}
}
while (run) {
System.out.println("---------------------------------------------");
System.out.println(" 1. 점수리스트 | 2. 분석 | 3. 종료");
System.out.println("---------------------------------------------");
System.out.print("선택>");
int selectNo = Integer.parseInt(scanner.nextLine());
switch(selectNo) {
case 1:
System.out.println("\t국어\t영어\t수학");
System.out.println("------------------------------------------");
for (Student st : students) {
System.out.printf("%s\t%d\t%d\t%d\t총점:%d\t평균:%f\n"
,st.name,st.kor,st.eng,st.math, st.getTotal(), st.getAvg());
}
System.out.println("------------------------------------------");
System.out.printf("총점:\t%d\t%d\t%d\n", korTot, engTot, mathTot);
break;
case 2:
System.out.println("프로그램 분석");
System.out.printf("국어 최고 점수: %d %s\n",korMax, kMaxName);
System.out.printf("영어 최고 점수: %d %s\n",engMax, eMaxName);
System.out.printf("수학 최고 점수: %d %s\n",mathMax, mMaxName);
break;
case 3:
run = false;
System.out.println("프로그램 종료");
}
}
}
}
Student 클래스 활용 배열에 학생수 입력 후 국어, 영어, 수학 출력 ( class 값 선언)