전체 글 (135)

728x90

 

수업내용 정리 (Java)

 

1. Ex01

 1-1) test ㄱ

더보기
Scanner sc = new Scanner(System.in);
int sum = 0;

while(true) {
	System.out.print("숫자입력> ");
	int num = sc.nextInt();
	
	if(num == 0 || num == -1) {
		System.out.println("최종 누적합계: "+sum);
		break;
	}else {
		sum+=num;
	}
}
  • for문으로 돌리려고 했는데 선생님이 while문이 보기에도 좋고 적합하다고 해서 while문으로 바꿔서 코드를 짰다. 이 이야길 안 듣고 코드를 먼저 짰다면 for문으로 했을 것 같다.
  • for문: 반복횟수가 정해져 있을 경우 적합
  • while문: 반복횟수가 정해져 있지 않을 경우 적합

 

 1-2) 선생님이 하신 것

더보기

1.

while(true) {
	System.out.print("정수입력(종료는 0 or -1): ");
	int num = sc.nextInt();
	
	if(num == 0 || num == -1) {
		break;
	}
	sum+=num;
}
System.out.println("최종 누적합계는 "+sum+"입니다.");

 

2. 반복횟수를 정하고, 상황에 따라 누적 합계 출력

int cnt = 0;
boolean flag = false;
while(cnt<5) {
	System.out.print("정수입력(종료는 0 or -1): ");
	int num = sc.nextInt();
	
	if(num == 0 || num == -1) {
		flag = true;
		break;
	}
	sum+=num;
	cnt++;
}
if(flag) {
	System.out.println("break 후 최종 누적합계는 "+sum+"입니다.");
}else {
	System.out.println("5번 누적 후 최종 누적합계는 "+sum+"입니다.");

 

 3. do-while문 이용하여 2번 출력

cnt = 0;
flag = false;
do {
	System.out.print("정수입력(종료는 0 or -1): ");
	int num = sc.nextInt();
	
	if(num == 0 || num == -1) {
		flag = true;
		break;
	}
	sum+=num;
	cnt++;
}while(cnt<5);
if(flag) {
	System.out.println("break 후 최종 누적합계는 "+sum+"입니다.");
}else {
	System.out.println("5번 누적 후 최종 누적합계는 "+sum+"입니다.");
}

 

 

 

2. String test (추가)

 2-1) String test ㄱ

더보기
String str1 = new String("hello");
String str2 = new String("hello");
String str3 = "hello";
  • str1, str2, str3 전부 참조값이 다르다.
  • new를 붙이면 새로 만드는 것이기 때문에 같은 문자열이더라도 참조값이 달라진다.

 

1. == 비교: 참조값을 비교

if(str1 == str2) {
	System.out.println("참조값이 같다.");
}else {
	System.out.println("참조값이 다르다.");
}

 

2. .equals 비교: 문자열을 비교

if(str1.equals(str2)) {
	System.out.println("문자열이 같다.");
}else {
	System.out.println("문자열이 다르다.");
}

 

3. .equals 비교를 안 쓰고 문자열을 비교하는 케이스

switch(str1) {
case "hello": case "Hello":
	System.out.println("안녕하세요");
	break;
case "bye": case "Bye":
	System.out.println("잘가요");
	break;
default:
	System.out.println("몰라요");
}

 

4. toUpperCase / toLowerCase

switch(str1.toUpperCase()) {
case "HELLO":
	System.out.println("안녕하세요");
	break;
case "BYE":
	System.out.println("잘가요");
	break;
default:
	System.out.println("몰라요");
}
  • toUpperCase는 문자열을 대문자로 바꿔준다.
  • toLowerCase는 문자열을 소문자로 바꿔준다.

 

 2-2) String test2 ㄱ

더보기
int len = "안녕하세요".length();
System.out.println("문자열의 길이: "+len);
  • .length는 문자열의 길이를 세준다.

 

String str = "    Good-Morning    ";
System.out.println(str.trim());
  • .trim은 문자열의 공백을 지워준다.

 

String str2 = str.concat(" everyone");
System.out.println("str2: "+str2);
  • str+" evryone" 과 동일

 

String str5 = String.valueOf(1000)+String.valueOf(2000);
//		str5 = 1000+""+2000+"";	//위와 같음
str5+=1;	//100020001
int num = Integer.parseInt(str5)+1;	//100020002
System.out.println(num);

 

 

 

3. 텍스트 블록

  • JDK 15 이상 사용 가능
더보기
String str = """
		강아지가 "멍멍" 짖는다.
		C:\\work\\a.txt 열기""";
  • 큰 따옴표(")를 세개 쓰고 엔터 친 이후 word를 사용하듯이 글을 적으면 그대로 출력된다.
  • 역슬래시(\)의 경우, 한번 더 역슬래시를 적으면 오류없이 제대로 출력 가능

 

출력 ㄱ

 


 

전체 피드백

  • 컨디션 관리 잘 하기..

 


728x90
728x90

 

수업내용 정리 (Java) - 복습 +a

 

1. part1

 1-1) 정보가 올라가는 곳(저장되는 곳)

  • 스택(1MB): 지역변수(큰 개념), 매개변수(작은 개념) / 메소드 실행이 끝나면 사라진다.
  • 힙(비례적으로 늘어남): 인스턴스(객체)
  • 메소드 영역(위 두 개보단 비교적 덜 중요): 클래스 정보, 클래스 변수

 

 1-2) 메인 ㄱ

더보기
public static void main(String[] arg) {
	int[] arr = new int[10000000];
	new Student();
	Student.scName = "인천대";
	Student.showTitle();
	
	Student kim = new Student("kim",1);
	kim.showStuInfo();
	Student lee = new Student("lee");
	lee.showStuInfo();
		
	Student cha = new Student(10);
	cha.showStuInfo();
	
	Student noname = new Student();		
}

 

// 클래스 메소드
public static void main(String[] arg){

}
  •  main도 클래스 메소드로 한 클래스에 하나만 존재할 수 있는 메소드다.

 

int[] arr = new int[10000000];
new Student();
Student.scName = "인천대";
Student.showTitle();
  • 배열과 class 객체를 생성해봤다.
  • 배열: int[] arr = new int[];
  • 객체: new Student();
  • 객체 값 지정: Student.scName = "인천대";
  • 객체 메소드: Student.showTitle();

 

//Student kim = new Student();
//kim = null;
//kim.setName("Kim");
//kim.setsNo(1);
Student kim = new Student("kim",1);
kim.showStuInfo();
Student lee = new Student("lee");
lee.showStuInfo();
	
Student cha = new Student(10);
cha.showStuInfo();

Student noname = new Student();
  • 객체의 값을 지정하고, showStuInfo 메소드를 통해 출력도 진행했다.
  • null: 아무 값도 가지고 있지 않다.

 

 1-3) Student 클래스 ㄱ

더보기
// 인스턴스 변수
static String scName = "인하공전";

// 인스턴스 변수_정보은닉
private int sNo;	//이 클래스 밖에서는 접근할 수 없게 하기 위해
//public int sNo;		//이 클래스 밖 어디서도 접근할 수 있도록 하기 위해
private String name;
  • 클래스의 인스턴스 변수는 정보은닉을 하는 것이 좋다.
  • private int sNo: 같은 클래스 내에서만 접근 가능 (클래스에는 private를 붙일 수 없음)
  • public int sNo: 접근 제한 없음

 

// 클래스 변수 / 인스턴스에 할당되는 변수가 아니라 클래스에 할당되는 변수)
/*
 final변수는 이름이 무조건 대문자. 값을 바꾸려고 하면 에러.
 클래스 변수이기 때문에 final static은 new SCNAME()이 아닌 SCNAME으로만 사용
 */

 

//생성자
public Student() {
	name = "noname";
	sNo = -1;
}
public Student(String name) {
	this.name = name;
}
public Student(int sNo) {
	this.sNo = sNo;
}
public Student(String name, int sNo) {
	this.name = name;
	this.sNo = sNo;
}
  • 매개변수를 아무것도 받지 않으면, 없다는 것을 알리기 위해 name을 noname으로 설정하고, sNo는 -1로 설정한다.
  • this: 현재 실행중인 인스턴스의 참조변수

 

public int getsNo() {
	return sNo;
}
public void setsNo(int sNo) {
	if(sNo<0) return;	//경계검사
	this.sNo = sNo;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getScName() {
	return scName;
}
public void setScName(String scName) {
	this.scName = scName;
}
  • set/get 메소드
  • set 메소드에 if문으로 경계검사를 할 수 있다. 위의 상황에서는 sNo가 0보다 작을 경우에는 리턴한다.
  • 마지막의 setScName은 this.scName에서 노란색 밑줄이 쳐지는데, 이거는 클래스변수를 set메소드에 넣어서 나는 경고다. 무시하고 실행해도 정삭작동 된다. (클래스변수는 보통 임의로 변경하지 않으므로 set메소드가 필요없음)

 

public void showStuInfo() {
	if(sNo==0) {
		System.out.println("\t"+name+"\t"+scName);
	}else if(name == null){
		System.out.println(sNo+"\t\t"+scName);
	}else {
		System.out.println(sNo+"\t"+name+"\t"+scName);
	}
}
  •  print를 할 때 조건문을 넣어서 해당하는 상황에 따라 다르게 출력되도록 했다.
  • 만약 sNo가 0이라면 즉, sNo를 입력하지 않거나 0을 입력했다면 sNo를 출력하지 않도록 했다.
  • 만약 name이 null이라면 즉, name을 입력하지 않았다면 name을 출력하지 않도록 했다.
  • 만약 그렇지 않다면 즉, sNo도 name도 값이 있다면 전부 출력하도록 했다.

 

public static void showTitle() {
	System.out.println("=====================");
	System.out.println("\t"+scName+" 학생명단");
	System.out.println("=====================");
}
  • 클래스 메소드
  • 인스턴스와 상관없는 일을 하는 메소드
  • 이 메소드 안에 System.out.println(name); 라는 코드를 넣게 된다면 인스턴스와 관련이 있기 때문에 에러가 난다.

 

 

2. part2

 2-1) AdderMain ㄱ

더보기
public static void main(String[] args) {
	SimpleAdder sa = new SimpleAdder();
	sa.adder(10);
	sa.adder(20);
	sa.adder(30);
	System.out.println(sa.getTotalNum());
}
// 체이닝
public static void main(String[] args) {
	SimpleAdder sa = new SimpleAdder()
	sa.adder(10).adder(20).adder(30);
	System.out.println(sa.getTotalNum());
}
  • 위의 코드와 아래의 코드는 동일하게 돌아가서 최종 60을 출력하게 된다.
  • 아래의 코드처럼 메소드를 연이어서 쓰는 것을 체이닝이라고 한다.

 

 2-1.2) Adder ㄱ

더보기
public class SimpleAdder {
	private int totalNum;
	
	public SimpleAdder adder(int num) {
		this.totalNum += num;
		return this;
	}
	
	public int getTotalNum() {
		return totalNum;
	}
}
  •  return this;는 자신(원본)을 반환한다.

 

 

 2-2) Ex03 ㄱ

더보기
public class Ex03 {
	public static void main(String[] args) {
		int boxVolume = boxVolume(3,3,3);	//가로,세로,높이
		System.out.println("박스 부피: "+boxVolume);	//27
		boxVolume = boxVolume(5,5);	//높이생략 / 생략하면 무조건 1
		System.out.println("박스 부피: "+boxVolume);	//25
		boxVolume = boxVolume(7);	//세로, 높이 생략
		System.out.println("박스 부피: "+boxVolume);	//7
	}
	

	private static int boxVolume(int i) {
		int volume = i;
		return volume;
	}
	private static int boxVolume(int i, int j) {
		int volume = i*j;
		return volume;
	}
	private static int boxVolume(int i, int j, int k) {
		int volume = i*j*k;
		return volume;
	}
}
//쌤이 하신것
private static int boxVolume(int width, int length, int height) {
	return width*length*height;
}
private static int boxVolume(int width, int length) {
	return boxVolume(width,length,1);	//앞의 메소드를 호출
}
private static int boxVolume(int width) {
	return boxVolume(width,1,1);
}
  • main메소드 아래에서 메소드를 만들어서 클래스를 만드는 대신 사용할 수 있다.
  • return에서 바로 계산하여 보내도 된다.

 

 

 2-3) ShapeMain ㄱ

더보기
// a팀 패키지
package aTeam;
public class Circle {
	public Circle() {
		System.out.println("A팀의 Circle");
	}
	public void showCircleInfo() {
		System.out.println("A팀의 showCircleInfo");
	}
}
// b팀 패키지
package bTeam;
public class Circle {
	public Circle() {
		System.out.println("B팀의 Circle");
	}
	public void showInfo() {
		System.out.println("B팀의 showInfo");
	}
}
  • 자바의 클래스는 무조건 패키지에 들어있어야 한다.
  • 패키지를 선택하지 않고 클래스를 만들면 default 패키지에 들어가게 된다. (default를 권장하지 않음)

 

import aTeam.Circle;

public class ShapeMain {
	public static void main(String[] args) {
		Circle cir = new Circle();
		cir.showCircleInfo();
		System.out.println("-------------------");
		bTeam.Circle cir2 = new bTeam.Circle();
		cir2.showInfo();
	}
}
  • 같은 프로젝트 내에서라면 a팀의 패키지의 Circle만 import해왔지만 b팀의 패키지의 Circle도 사용할 수 있다.

 

 

 2-4) String test ㄱ

더보기
String name = "kim";
String name2 = "kim";
//name == name2: 참조값이 같다.
//name.equals(name2): 문자열이 같다.

name = "kim"
name2 = new String("kim");
//name == name2: 참조값이 다르다.
//name.equals(name2): 문자열이 같다.

name = new String("kim");
name2 = new String("kim");
//name == name2: 참조값이 다르다.
//name.equals(name2): 문자열이 같다.

name = "kim";
name2 = "cha";
//name == name2: 참조값이 같다.
//name.equals(name2): 문자열이 다르다.

name = "kim"
name2 = new String("cha");
//name == name2: 참조값이 다르다.
//name.equals(name2): 문자열이 다르다.

name = new String("kim");
name2 = new String("cha");
//name == name2: 참조값이 다르다.
//name.equals(name2): 문자열이 다르다.
  • ==: 참조값을 비교
  • .equals: 문자열을 비교

 

 

3. part3

 3-1) ShapeMain ㄱ

더보기
Point p = new Point(4,4);
Circle cir = new Circle(p, 5.5);
cir.showCircleInfo();
//중심좌표
//x: 4 / y: 5
//반지름: 5.5

Circle cir2 = new Circle(4,4, 5.5);
//중심좌표
//x: 4 / y: 5
//반지름: 5.5
cir2.showCircleInfo();
  • import는 패키지가 다를 때에만 사용한다.

 

 3-2) Point ㄱ

더보기
public class Point {
	private int x, y;	// 0~100 음수나 100 초과의 숫자는 안 받음
	
	public Point(int x, int y) {
		setX(x);	// 밑의 메소드 호출
		setY(y);
	}

	public int getX() {
		return x;
	}
	public void setX(int x) {
		if(x<0 || x>100) return;
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		if(y<0 || y>100) return;
		this.y = y;
	}
	
	//좌표 정보 출력
	public void showPointInpo() {
		System.out.println("======중심좌표======");
		System.out.println("x: "+x+"\ty: "+y);
	}
}
  • 좌표 정보를 출력하는 showPointInpo 메소드는 인스턴스 메소드.

 

 3-3) Circle ㄱ

더보기
public class Circle {
	private Point p;	//new Point(1,1);	//중심좌표
	private double radius;	//반지름

	public Circle(Point p, double rad) {
		this.p = p;
		radius = rad;
	}
    public Circle(int x, int y, double rad) {
		p = new Point(x, y);
		radius = rad;
	}

	public void showCircleInfo() {
		//중심좌표
		//x: 4 / y: 5
		//반지름: 5.5
		p.showPointInpo();
		System.out.println("---------");
		System.out.println("반지름: "+radius);
	}
}
  • 인스턴스 변수에 다른 클래스를 호출할 수 있다.

 

 3-4) 심화 ㄱ

더보기

ShapeMain

Ring ring = new Ring(4,4,5.5, 5,5,6.6);
ring.showRingInfo();

Ring ring2 = new Ring(new Circle(4,4,5.5),	new Circle(5,5,6.6));
ring2.showRingInfo();

 

Point

public class Point {
	private int x, y;	// 0~100 음수나 100 초과의 숫자는 안 받음
	
	public Point(int x, int y) {
		setX(x);	// 밑의 메소드 호출
		setY(y);
	}

	public int getX() {
		return x;
	}
	public void setX(int x) {
		if(x<0 || x>100) return;
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		if(y<0 || y>100) return;
		this.y = y;
	}
	
	//좌표 정보 출력
	public void showPointInpo() {
		System.out.println("======중심좌표======");
		System.out.println("x: "+x+"\ty: "+y);
	}
}
  • 위의 코드 그대로 사용

 

Circle

public class Circle {
	private Point p;	//new Point(1,1);	//중심좌표
	private double radius;	//반지름

	public Circle(Point p, double rad) {
		this.p = p;
		radius = rad;
	}
    public Circle(int x, int y, double rad) {
		p = new Point(x, y);
		radius = rad;
	}

	public void showCircleInfo() {
		//중심좌표
		//x: 4 / y: 5
		//반지름: 5.5
		p.showPointInpo();
		System.out.println("---------");
		System.out.println("반지름: "+radius);
	}
}
  • 위의 코드 그대로 사용

 

Ring

public class Ring {
private Point p;
private Point p2;
private Circle inCircle;	//new Circle();
private Circle outCircle;

public Ring(Point p, double r, Point p2, double r2) {
	inCircle = new Circle(p, r);
	outCircle = new Circle(p2, r2);
}

public Ring(int x, int y, double r, int x2, int y2, double r2) {
	p = new Point(x, y);
	inCircle = new Circle(p, r);
	p2 = new Point(x2, y2);
	outCircle = new Circle(p2, r2);	
}
public Ring(Circle inCircle, Circle outCircle) {
	this.inCircle = inCircle;
	this.outCircle = outCircle;
}

public void showRingInfo() {
	System.out.println("=======================");
	System.out.println("링의 안쪽");
	inCircle.showCircleInfo();
	System.out.println("\t----");
	System.out.println("링의 바깥쪽");
	outCircle.showCircleInfo();
	System.out.println("=======================");
}

 


 

질문한 내용이나 어려웠던 점 메모

1. String test

  • String인데 null값을 제외하려면 .equlas를 사용해야 한다고 그래서 많이 헷갈렸다.

 


 

전체 피드백

  • 모르겠으면 일단 외울것!!!
  • 선생님이 바뀌면서 방식을 따라가기 너무 힘들었다..게다가 잠을 이상하게 잔 바람에 컨디션 관리에 실패하고 말았다. 제대로 컨디션 조절하기..!

 


728x90
728x90

 

수업내용 정리 (Java)

 

1. class 예제_학생 점수

  • Student

 - 필드 ㄱ

더보기
  • 필드
private String sno;	//학번
private String name;
private int kor;
private int eng;
private int mat;
private int total;
private double avg;
private char grade;	//A,B,C ...

static int num = 100;
  •  static 필드는 정적필드로, 해당 클래스의 객체들이 공유한다.

 

 - 생성자 ㄱ 

더보기
  • 생성자
// 생성자 1
public Student(){
	sno = "S" + num++;
}
// 생성자 2
public Student(String name, int kor, int eng, int mat){
	this();
	this.name = name;
	this.kor = kor;
	this.eng = eng;
	this.mat = mat;
	total = kor+eng+mat;
	avg = total/(double)3;
	if(avg >= 90) {
		grade = 'A';
	}else if(avg >= 80) {
		grade = 'B';
	}else if(avg >= 70) {
		grade = 'C';
	}else if(avg >= 60) {
		grade = 'D';
	}else {
		grade = 'F';
	}
}
  • 생성자를 두 개 만들어두고, 두 개 모두 코드를 짜봤다. (StudentMain에서 후술)
  • 생성자 1은 객체를 생성할때 매개변수를 아무것도 받지  않고, 객체의 sno(학번)에 num++을 대입한다.
  • 생성자 2는 객체를 생성할때 매개변수로 이름, 국어점수, 영어점수, 수학점수를 입력받는다. 객체의 sno(학번)에 num++을 대입하고, 입력받은 매개변수들을 각각의 필드에 대입한다. total, avg, grade는 입력받은 매개변수를 이용하여 계산한 값을 대입한다.

 

  - 메서드 ㄱ

더보기
  • 메서드
// 프라이빗 필드의 각각 set/get 메서드
public void setName(String name){
	this.name = name;
}
public String getSno(){
	return name;
}
  • 예시를 위해 sno만 set/get 메서드를 작성해놓았다.
  • 화면을 우클릭 후 뜨는 창에서 Source>Generate Getters and Setters를 누르면 새로 창이 뜨는데 여기서 set/get 메서드를 만들 것들만 클릭하고 Generate를 눌러주면 자동으로 선택한 필드들의 set/get 메서드를 생성해준다.
화면 우클릭> Source>Generate Getters and Setters
set/get 메서드를 만들 필드 선택 후 Genarate

 

public void setTAG(){
	total = kor+eng+mat;
	avg = total/(double)3;
	if(avg >= 90) {
		grade = 'A';
	}else if(avg >= 80) {
		grade = 'B';
	}else if(avg >= 70) {
		grade = 'C';
	}else if(avg >= 60) {
		grade = 'D';
	}else {
		grade = 'F';
	}
}
  • 호출하면 생성자 1을 사용하여 학생을 등록했거나, 학생 정보를 수정했을때 수정된 값에 따라 total, avg, grade를 다시 계산한 값을 대입해준다. 

 

public void print(){
	System.out.printf("%s\t%s\t%d\t%d\t%d\t%d\t%.2f\t%c\n",
			sno,name,kor,eng,mat,total,avg,grade);
}
  • 호출하여 출력할때, 학번, 이름, 국어점수, 영어점수, 수학점수, 총점, 평균(소수점 2자리까지), 학점 순으로 출력된다.

 

 

  • StudentMain (이번엔 if문이 아닌 switch문으로 만들었다.)

 - 변수/객체/임포트 ㄱ

더보기
  • 임포트
import java.util.ArrayList;
import java.util.Scanner;
import day11.Util;
  • day11.Util은 숫자 체크 메서드를 사용하기 위해 임포트해왔다.

 

  • 변수/객체
Scanner sc = new Scanner(System.in);
ArrayList<Student> list = new ArrayList<Student>();
boolean run = true;
Util util = new Util();
  • day11.Util은 숫자 체크 메서드를 사용하기 위해 임포트해왔다.

 

 - 메뉴 ㄱ

더보기
  • 메뉴
System.out.println("=================반==================");
System.out.println("1.학생등록 2.리스트 3.검색 4.수정 5.삭제 0.종료");
int menu = util.numberCheck("메뉴 선택> ", sc);

System.out.println();
System.out.println("====================================");
  • 메뉴 선택에 day11.Util의 숫자체크 메서드를 사용하여 문자를 입력해도 콘솔창에 오류가 뜨지 않게 했다.
  • 밑의 두 줄은 의미없는 꾸밈

 

 - 메뉴 1 ㄱ

더보기
  • 기본 틀
case 1:
	System.out.println(" ====> 학생 등록");
    
    // 생성자 사용
    
    break;

 

  • 생성자 1을 사용하여 등록
//생성자 1
Student s = new Student();
System.out.print("학생 이름> ");
s.setName(sc.next());
System.out.print("국어 점수> ");
s.setKor(sc.nextInt());
System.out.print("영어 점수> ");
s.setEng(sc.nextInt());
System.out.print("수학 점수> ");
s.setMat(sc.nextInt());
s.setTAG();
list.add(s);
System.out.println(" > "+s.getName()+" 학생 등록 완료!");
  • 객체를 하나 생성해서 그 객체에 바로 set 메서드를 이용해 이름, 국어점수, 영어점수, 수학점수를 직접 입력받는다.
  • setTAG 메서드를 이용해 total, avg, grade 값을 세팅한다.
  • 전부 입력되면 ArrayList로 만들어둔 <Student> list에 설정된 객체를 추가한다.

 

//setTAG 메서드를 쓰지 않았을 때 사용해야 하는 코드
s.setTotal(s.getKor()+s.getEng()+s.getMat());
s.setAvg(s.getTotal()/(double)3);
if(s.getAvg() >= 90) {
	s.setGrade('A');
}else if(s.getAvg() >= 80) {
	s.setGrade('B');
}else if(s.getAvg() >= 70) {
	s.setGrade('C');
}else if(s.getAvg() >= 60) {
	s.setGrade('D');
}else {
	s.setGrade('F');
}
  •  setTAG 메서드 안에 있는 코드를 직접 적어서 값을 세팅해야 하는데 다른 메뉴에서도 사용해야 하는 경우, 다시 적어야하는 번거로움이 생긴다.

 

  • 생성자 2를 사용하여 등록
//생성자 2
System.out.print("학생 이름> ");
String name = sc.next();
System.out.print("국어 점수> ");
int kor = sc.nextInt();
System.out.print("영어 점수> ");
int eng = sc.nextInt();
System.out.print("수학 점수> ");
int mat = sc.nextInt();
Student s = new Student(name,kor,eng,mat);
list.add(s);
System.out.println(" > "+name+" 학생 등록 완료!");
  • 변수를 지정해서 이름, 국어점수, 영어점수, 수학점수를 입력받아두고, 객체를 하나 생성해서 매개변수에 입력받아둔 변수를 입력한다.
  • 전부 입력하면 ArrayList로 만들어둔 <Student> list에 설정된 객체를 추가한다.

 

 - 메뉴 2 ㄱ

더보기
  •  학생 리스트
case 2:
	System.out.println(" ====> 학생 리스트");
	System.out.println("학번\t이름\t국어\t영어\t수학\t총점\t평균\t학점");
	System.out.println("---------------------------------------------------------------");
	for(Student a : list) {
		a.print();
	}
	break;
  •  foreach를 통해 list에 추가된 객체들을 차례대로 출력한다.

 

 - 메뉴 3 ㄱ

더보기
  •  학생 검색
case 3:
System.out.println(" ====> 학생 검색");
System.out.print("검색할 학번> ");
String searchS = sc.next();
boolean find = false;
for(Student sS : list) {
	if(sS.getSno().equals(searchS)) {
		System.out.println("학번\t이름\t국어\t영어\t수학\t총점\t평균\t학점");
		System.out.println("---------------------------------------------------------------");
		sS.print();
		find = true;
		break;
	}
}
if(!find) {
	System.out.println(" > 학번을 조회할 수 없습니다.");
}	
break;
  • 검색할 학번을 입력받고, foreach문을 통해 list에 있는 학번 중에 입력받은 학번과 동일한게 있다면 그 학번의 정보를 출력하고 foreach문을 종료한다.
  • foreach문 전에 입력해둔 boolean find(false)를 학번을 찾았으면 true로 바꾸고, 못찾았다면 foreach문 밖에서 만약 find가 false라면 학번을 조회할 수 없다고 출력

 

 - 메뉴 4 ㄱ

더보기
  •  학생 정보 수정
case 4:
	System.out.println(" ====> 정보 수정");
	System.out.print("수정할 학번> ");
	String reS = sc.next();
	find = false;
	for(Student sS : list) {
		if(sS.getSno().equals(reS)) {
			System.out.println("학번\t이름\t국어\t영어\t수학\t총점\t평균\t학점");
			System.out.println("---------------------------------------------------------------");
			sS.print();
			System.out.print("국어 점수> ");
			sS.setKor(sc.nextInt());
			System.out.print("영어 점수> ");
			sS.setEng(sc.nextInt());
			System.out.print("수학 점수> ");
			sS.setMat(sc.nextInt());
			System.out.println(" > 수정이 성공적으로 완료되었습니다.");
			sS.setTAG();
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 학번을 조회할 수 없습니다.");
	}
	break;
  • 수정할 학번을 입력받고, foreach문을 통해 list에 있는 학번 중에 입력받은 학번과 동일한게 있다면 그 학번의 정보를 출력하고 국어점수, 영어점수, 수학점수를 다시 입력받고, setTAG 메서드를 호출한 뒤 foreach문을 종료한다.
  • foreach문 전에 입력해둔 boolean find(false)를 학번을 찾았으면 true로 바꾸고, 못찾았다면 foreach문 밖에서 만약 find가 false라면 학번을 조회할 수 없다고 출력

 

 - 메뉴 5 ㄱ

더보기
  •  학생 정보 삭제
case 5:
	System.out.println(" ====> 정보 삭제");
	System.out.print("삭제할 학번> ");
	String delS = sc.next();
	find = false;
	for(Student sS : list) {
		if(sS.getSno().equals(delS)) {
			System.out.println("학번\t이름\t국어\t영어\t수학\t총점\t평균\t학점");
			System.out.println("---------------------------------------------------------------");
			sS.print();
			System.out.print("삭제하시겠습니까? (Y/y) > ");
			String Y = sc.next();
			if(Y.equals("Y") || Y.equals("y")) {
				System.out.println(" > 성공적으로 삭제가 완료되었습니다.");
				list.remove(sS);
			}
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 학번을 조회할 수 없습니다.");
	}
	break;
  • 삭제할 학번을 입력받고, foreach문을 통해 list에 있는 학번 중에 입력받은 학번과 동일한게 있다면 그 학번의 정보를 출력하고 삭제할 거냐고 다시 물어본 후, 답이 Y, y 중 하나라면 list에서 객체를 삭제하고, foreach문을 종료한다.
  • foreach문 전에 입력해둔 boolean find(false)를 학번을 찾았으면 true로 바꾸고, 못찾았다면 foreach문 밖에서 만약 find가 false라면 학번을 조회할 수 없다고 출력

 

 - 메뉴 0 ㄱ

더보기
  • 메뉴 0 (종료)
case 0:
	System.out.println(" ====> 종료");
	run = false;
	break;
  • while문을 변수 run(true)으로 돌리고 있었으니, run을 false로 바꿔줌으로 while문을 빠져나간다.

 

 - 그 외 ㄱ

더보기
  • 메뉴 선택에서 0~5 사이의 숫자가 아닌 다른 숫자를 입력했을 경우
default:
	System.out.println(" > 번호를 잘못 입력하셨습니다.");
}

 

  • swich문을 빠져나간 후 의미없는 꾸밈
System.out.println("====================================");
System.out.println();

 


 

전체 피드백

  • 아직 class 사용이 익숙치 않아서 생성자1을 사용하여 객체 생성하기를 직접 적었다가 나중에서야 바꿨다.
  • 오후시간에 각자 프로그램을 하나 만들어보라고 하셨는데 중복 없이 랜덤으로 하는게 저번에 됐었는데 이번에 다른 방법으로 하려니까 자꾸 오류가 나서 나중에 다시 해보기로 했다. 이것만 해결하면 프로그램을 완성하게 되니까 조금씩 건드려봐야겠다. (블로그에 정리해서 올릴 수 있으면 올리기!)

 


728x90
728x90

 

수업내용 정리 (Java)

 

1. 예제1_Shopping

  • Shopping
더보기
  • 필드
private String pno;	//상품번호
private String name;	//상품명
private int price;	//가격
private int quantity;	//수량

private static int num = 100;
  1. static 은 해당 클래스의 객체들이 공유하는 정적필드

 

  • 생성자
public Shopping(String name, int price, int quantity) {
	pno = "P"+num++;
	this.name = name;
	this.price = price;
	this.quantity = quantity;
}
  1. 객체를 생성할 때 매개변수로 값을 받아온다.
  2. pno에 정적필드인 num 값을 입력하고, num에 1을 더한다.
  3. 매개변수에 받아온 값을 각 맞는 필드에 입력한다.

 

  • 메서드
// get/set
public String getPno() {
	return pno;
}
public void setPno(String pno) {
	this.pno = pno;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getPrice() {
	return price;
}
public void setPrice(int price) {
	this.price = price;
}
public int getQuantity() {
	return quantity;
}
public void setQuantity(int quantity) {
	this.quantity = quantity;
}
  1. get) private 필드 값을 메인에서 호출할 수 있도록 한다.
  2. set) 메인에서 private 필드 값을 변경할 수 있도록 한다.

 

public void print() {
	if(quantity == 0) {
		System.out.printf("%s\t%s\t%,d원\t품절!\n",pno,name,price);
	}else {
		System.out.printf("%s\t%s\t%,d원\t%d개\n",pno,name,price,quantity);
	}
}
  1.  메인에서 호출하면 quantity 값이 0이거나 아닐 때 리스트를 출력한다.

 

public void buy(int balance, int buyQu) {
	int buyQP = price*buyQu;
	if(buyQu > quantity) {
		System.out.println(" > 상품 수량이 부족합니다.");
	}else if(buyQu<=quantity && buyQP>balance) {
		System.out.println(" > 잔액이 부족합니다.");
	}else if(buyQu<=quantity && buyQP<=balance) {
		quantity -= buyQu;
		balance -= buyQP;
		System.out.println(" > 상품이 정상적으로 구매되었습니다.");
		System.out.printf("상품 구매 후 잔액: %,d원\n",balance);
	}
}
  1. 상품을 구매할 때 필요한 코드가 너무 길어질 것 같아서 따로 메서드를 만들었다.
  2. 매개변수로 현재 잔액과 구매할 수량을 입력받아온다.
  3. 변수를 하나 만들어서 구매할 수량에 맞는 가격을 저장해둔다.
  4. 만약 상품수량보다 많은 수량이라면, 상품 수량 부족 출력,
  5. 그렇지 않고 저장해둔 금액이 잔액보다 크다면, 잔액 부족 출력,
  6. 그렇지 않고 상품수량보다 적거나 같은 수량이고 저장해둔 금액이 잔액보다 작거나 같으면, 상품수량에서 구매하는 수량을 빼고, 잔액에서 저장해둔 값을 빼고, 정상 구매 출력 후 남은 잔액 출력
  • ShoppingMain
더보기
  • 변수 선언
Scanner sc = new Scanner(System.in);
ArrayList<Shopping> list = new ArrayList<Shopping>();
int balance = 10000;	//잔액

 

  • 메뉴선택
System.out.println("============쇼핑몰============");
System.out.printf("\t\t[잔액: %,d원]\n", balance);
System.out.println("1.상품등록 2.상품목록 3.상품검색 4.상품수정\n5.상품삭제 6.잔액충전 0.종료");
System.out.print("메뉴선택> ");
int menu = sc.nextInt();

System.out.println();
System.out.println("========================");
  1.  밑의 두 줄은 알아보기 쉽게 나눠놓는 용도로 적어놓았다.

 

  • 메뉴 1
if(menu == 1) {
	System.out.println(" ====> 상품 등록");
	System.out.print("상품명> ");
	String name = sc.next();
	System.out.print("가격> ");
	int prise = sc.nextInt();
	System.out.print("개수> ");
	int quantity = sc.nextInt();
	Shopping a = new Shopping(name,prise,quantity);
	list.add(a);
	System.out.println(name+" 상품 등록이 완료되었습니다.");	
}
  1.  상품명, 가격, 개수를 각각 입력받아 ArrayList에 저장한다.

 

  • 메뉴 2
else if(menu == 2) {
	System.out.println(" ====> 상품 목록");
	int cnt = 0;
	System.out.println("상품번호\t상품명\t가격\t수량");
	System.out.println("============================");
	for(Shopping a : list) {
		a.print();
		if(a.getQuantity() != 0) {
			cnt++;
		}
	}
	if(cnt != 0) {
		System.out.print("상품을 구매하시겠습니까? (Y/y)> ");
		String selet = sc.next();
		if(selet.equals("Y") || selet.equals("y")) {
			System.out.println(" > 구매하실 상품 번호를 입력해주세요.");
			System.out.print("상품번호> ");
			String buyPno = sc.next();
			boolean find = false;
			for(Shopping a : list) {
				if(buyPno.equals(a.getPno())) {
					if(a.getPrice() > balance) {
						System.out.println(" > 잔액이 부족합니다.");
					}else {
						System.out.println(" > 구매하실 수량을 입력해주세요.");
						System.out.print("구매수량> ");
						a.buy(balance, sc.nextInt());
					}
					find = true;
					break;
				}
			}
			if(!find) {
				System.out.println(" > 상품을 조회할 수 없습니다.");
			}
		}
	}else {
		System.out.println(" > 현재 구매할 수 있는 상품이 없습니다.");
	}	
}
  1.  foreach로 상품 목록을 출력한다.
  2. 상품 목록을 출력할 때, 상품 수량이 0이 아닌 경우에만 cnt를 1씩 추가한다.
  3. 만약, cnt가 0이 아니라면 상품을 구매할 수 있도록 출력한다.
  4. 상품 번호를 입력받고, 조회가 된다면 상품 가격과 잔액을 비교해서 잔액이 더 적다면 잔액 부족 출력, 잔액이 크거나 같다면 구매할 수량 입력 후, 구매 메서드를 사용한다. 
  5. 상품 번호를 입력받았을때, 조회가 됐다면 find를 true로 바꾸고 for문을 종료한다.
  6. 상품 번호를 입력받았을 때, 조회가 안 된다면 조회할 수 없다고 출력
  7. 만약 cnt가 0이라면 구매할 수 있는 상품이 없다고 출력

 

  • 메뉴 3
else if(menu == 3) {
	System.out.println(" ====> 상품 검색");
	System.out.print("검색할 상품번호> ");
	String searchPn = sc.next();
	boolean find = false;
	for(Shopping a : list) {
		if(searchPn.equals(a.getPno())) {
			System.out.println("상품번호\t상품명\t가격\t수량");
			System.out.println("============================");
			a.print();
			System.out.print("상품을 구매하시겠습니까? (Y/y)> ");
			String selet = sc.next();
			if(selet.equals("Y") || selet.equals("y")) {
				System.out.println(" > 구매하실 수량을 입력해주세요.");
				System.out.print("구매수량> ");
				a.buy(balance,sc.nextInt());
			}
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 상품을 조회할 수 없습니다.");
	}	
}
  1. 상품 번호를 입력받고, 조회된다면 해당 상품번호를 출력하고, 상품을 구매할건지 물어본 후 구매한다면 구매수량을 입력하면서 구매 메서드를 사용한다. find는 true로 바꾸고 for문을 종료한다.
  2. 조회가 안 된다면 조회할 수 없다고 출력

 

  • 메뉴 4
else if(menu == 4) {
	System.out.println(" ====> 상품 수정");
	System.out.print("수정할 상품 번호> ");
	String searchPn = sc.next();
	boolean find = false;
	for(Shopping a : list) {
		if(searchPn.equals(a.getPno())) {
			System.out.print("상품명> ");
			a.setName(sc.next());
			System.out.print("가격> ");
			a.setPrice(sc.nextInt());
			System.out.print("수량> ");
			a.setQuantity(sc.nextInt());
			System.out.println(" > 상품 수정이 성공적으로 완료되었습니다.");
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 조회할 수 없습니다.");
	}	
}
  1.  상품번호를 입력받고, 조회가 된다면 상품명, 가격, 수량의 값을 입력받아 저장한다. find는 true로 바꾸고 for문을 나간다.
  2. 조회가 안 된다면 조회할 수 없다고 출력

 

  • 메뉴 5
else if(menu == 5) {
	System.out.println(" ====> 상품 삭제");
	System.out.print("삭제할 상품 번호> ");
	String delPn = sc.next();
	boolean find = false;
	for(Shopping a : list) {
		if(delPn.equals(a.getPno())) {
			list.remove(a);
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 조회할 수 없습니다.");
	}	
}
  1.  상품번호를 입력받고, 조회가 된다면 해당 인덱스를 삭제하고 find를 true로 바꾸면서 for문을 나간다.
  2. 조회가 안 된다면 조회할 수 없다고 출력

 

  • 메뉴 6
else if(menu == 6) {
	System.out.println(" ====> 잔액 충전");
	System.out.print("충전할 금액> ");
	balance += sc.nextInt();
	System.out.println(" > 충전이 성공적으로 완료되었습니다.");
	System.out.println("충전 후 금액: "+balance);			
}
  1. 충전 금액을 입력받고, 잔액에 그 금액을 더한다.
  2. 충전 후 금액을 출력한다.

 

  • 메뉴 0
else if(menu == 0) {
	System.out.println(" ====> 종료");
	System.out.println("============================");
	break;
}

 

  • 그 외
else {
	System.out.println(" > 잘못된 메뉴입니다.");
}
System.out.println("============================");
System.out.println();
  1. 메뉴에 없는 숫자를 선택하면 잘못된 메뉴라고 출력
  2. 밑의 두 줄은 알아보기 쉽게 나눠놓는 용도로 적어놓았다.

 

 

2. 예제2_Board

  • Board
더보기
  • 필드
private String id;	//작성자 아이디
private int bno;	//책번호
private String title;	//
private String contents;	//
private int cnt;	//조회수
private boolean like;	//좋아요

static int num = 100;

 

  • 생성자
public Board(String title, String contents, String id) {
	bno = num++;
	this.title = title;
	this.contents = contents;
	this.id = id;
}

 

  • 메서드
public int getBno() {
	return bno;
}
public String getId() {
	return id;
}
public boolean getLike() {
	return like;
}
public void setTitle(String title) {
	this.title = title;
}
public void setContents(String contents) {
	this.contents = contents;
}
public void cntUp() {
	cnt++;
}
public void likeToggle() {
	like = !like;
}

 

public void print() {
	System.out.printf("%-14s\t\t%3d %s\n", "["+title+"]", cnt,like == true ? "🖤" : "♡");
	System.out.printf("┌──────────────────────────┐\n");
	System.out.printf("│%-26s│\n", "");
	System.out.printf("│%-26s│\n", 
			contents.length()<=26 ? contents : contents.substring(0,23)+"...");
	System.out.printf("└──────────────────────────┘\n");
}
  1. 선생님이 하신 것
  • BoardMain
더보기
  • 변수선언
Scanner sc = new Scanner(System.in);
ArrayList<Board> list = new ArrayList<Board>();
ArrayList<User> ulist = new ArrayList<User>();
int loginIndex = -1;

 

  • 메뉴선택
System.out.println("==========블로그==========");
System.out.println("1.회원가입 2.로그인 3.게시글목록 4.읽기 0.종료");
System.out.println("1.게시글등록 2.로그아웃 3.게시글목록 4.읽기\n"
			+ "5.수정 6.삭제 0.종료");
System.out.print("메뉴선택> ");
int menu = sc.nextInt(); sc.nextLine();
System.out.println();

 

  • 메뉴 1 (로그인X)
if(menu == 1)
if(loginIndex == -1) {
	System.out.println( "====> 회원가입");
	User user = new User();
	System.out.print("이름> ");
	user.setName(sc.next());
	System.out.print("아이디> ");
	user.setId(sc.next());
	System.out.print("비밀번호> ");
	user.setPw(sc.next());
	ulist.add(user);
	System.out.println(" > "+user.getName()+"님 회원가입을 축하드립니다.");
}

 

  • 메뉴 1 (로그인O)
else {
	System.out.println( "====> 게시글 등록");
	System.out.print("제목> ");
	String title = sc.nextLine();
	System.out.print("내용> ");
	String contents = sc.nextLine();
	Board b = new Board(title, contents,ulist.get(loginIndex).getId());
	list.add(b);
	System.out.println(title+" 게시가 성공적으로 완료되었습니다.");
}

 

  • 메뉴 2 (로그인X)
else if(menu == 2)
else if(menu == 2) {
	if(loginIndex == -1) {
		System.out.println(" ====> 로그인");
		System.out.print("아이디> ");
		String loginId = sc.next();
		System.out.print("비밀번호> ");
		String loginPw = sc.next();
		boolean find = false;
		for(int i=0; i<ulist.size(); i++) {
			if(loginId.equals(ulist.get(i).getId()) &&
					loginPw.equals(ulist.get(i).getPw())) {
				System.out.println(" > 로그인 성공!");
				loginIndex = i;
				find = true;
				break;
			}
		}
		if(!find) {
			System.out.println(" > 로그인 실패");
		}
		
	}
}

 

  • 메뉴 2 (로그인O) 
else {
	System.out.println(" ====> 로그아웃");
	loginIndex = -1;
	System.out.println(" > 로그아웃이 완료되었습니다.");					
}

 

  • 메뉴 3
else if(menu == 3) {
	System.out.println(" ====> 게시글 목록");
	for(Board b : list) {
		b.print();
	}	
}

 

  • 메뉴 4
else if(menu == 4) {
	System.out.println(" ====> 게시글 읽기");
	System.out.print("읽을 글 번호> ");
	int searchBno = sc.nextInt();
	boolean find = false;
	for(Board b : list) {
		if(searchBno == b.getBno()) {
			b.cntUp();
			b.print();
			find = true;
			System.out.print("좋아요를 ");
			System.out.print(!b.getLike() ? "누르시겠습니까?" : "취소하시겠습니까?");
			System.out.print(" (Y/y)> ");
			String like = sc.next();
			if(like.equals("Y") || like.equals("y")) {
				b.likeToggle();
			}
			break;
		}
	}
	if(!find) {
		System.out.println(" > 조회할 수 없습니다.");
	}				
}
  1. 글 번호를 입력받고, 조회가 된다면 조회수를 올리고 출력한다.
  2. 좋아요를 누를지 취소할지 물어보고, 긍정일 때만 likeToggle 메서드를 실행한다.
  3. 물어볼때 삼항연산자를 사용했다.

 

  • 메뉴 5 (로그인O)
else if(menu == 5 && loginIndex != -1) {
	System.out.println(" ====> 게시글 수정");
	System.out.print("수정할 글 번호> ");
	int updateBno = sc.nextInt();sc.nextLine();
	boolean find = false;
	for(Board b : list) {
		if(updateBno == b.getBno()) {
			if(b.getId().equals(ulist.get(loginIndex).getId())) {
				System.out.print("수정할 제목> ");
				b.setTitle(sc.nextLine());
				System.out.print("수정할 글> ");
				b.setContents(sc.nextLine());
				System.out.println(" > 성공적으로 글 수정이 완료되었습니다.");
			}else {
				System.out.println(" > 등록자만 수정 가능합니다.");
			}
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 조회할 수 없습니다.");
	}		
}

 

 

  • 메뉴 6 (로그인O)
else if(menu == 6 && loginIndex != -1) {
	System.out.println(" ====> 게시글 삭제");
	System.out.print("삭제할 글 번호> ");
	int deleteBno = sc.nextInt();
	boolean find = false;
	for(Board b : list) {
		if(deleteBno == b.getBno()) {
			if(b.getId().equals(ulist.get(loginIndex).getId())) {
				list.remove(b);	// 인덱스로 지우기, 객체로 지우기
				System.out.println(" > 성공적으로 삭제가 완료되었습니다.");
			}else {
				System.out.println(" > 등록자만 삭제 가능합니다.");
			}
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 조회할 수 없습니다.");
	}
}
  1.  ArrayList 삭제는 인덱스로 지울수도 있고, 객체로 지울 수도 있다.

 

  • 메뉴 0
else if(menu == 0) {
	System.out.println(" ====> 블로그 종료");
	System.out.println("========================");
	break;	
}

 

  •  그 외
else {
	System.out.println(" > 존재하는 메뉴를 선택해주세요.");	
}
System.out.println("========================");
System.out.println();

 

 


 

질문한 내용이나 어려웠던 점 메모

1. 삼항연산자

  • 가볍게 하고 지나가서 그런지 구조가 많이 낯설어서 응용하기는 쉽지 않을 것 같다.
  • 링크 속 학원 글 잘 보기..

 


 

전체 피드백

  • 출석 비콘 잘 찍자 ㅠㅠ!!! 저번에 퇴실 안 찍어서 결석인걸 확인했다..입실 비콘 안 찍어서 지각처리 된적도 있는데 너무 슬프다..

 


728x90
728x90

 

수업내용 정리 (Java)

 

1. class_복습+a

 1-1) 생성자

// 기본생성자
public User() {

}
User() {

}
  • 생성자의 앞 부분 public 없이 적어도 생성자로 사용이 가능하다.

 

 1-2) 복습 문제

더보기

메뉴에 따른 if문 코드 짜기

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Scanner sc = new Scanner(System.in);
	User[] list = new User[10];
	int cnt = 0;
	
	while(true) {
		System.out.println("============lol============");
		System.out.println("1.회원가입 2.로그인 3.회원목록 0.종료");
		System.out.print("메뉴선택> ");
		int menu = sc.nextInt();
		System.out.println();
		
		if(menu == 1 ) {
			System.out.println(" ==> 회원가입");
			User u = new User();
			System.out.print("이름 입력> ");
			u.setName(sc.next());
			System.out.print("아이디 입력> ");
			u.setId(sc.next());
			System.out.print("비밀번호 입력> ");
			u.setPw(sc.next());
			System.out.println(" > "+u.getName()+"님 회원가입을 환영합니다.");
			list[cnt] = u;
			cnt++;
			
		}else if(menu == 2) {
			System.out.println(" ==> 로그인");
			System.out.print("아이디 입력> ");
			String loginId = sc.next();
			System.out.print("비밀번호 입력> ");
			String loginPw = sc.next();
			boolean find = false;
			for(int i=0; i<cnt; i++) {
				if(loginId.equals(list[i].getId()) && loginPw.equals(list[i].getPw())) {
					System.out.println(" > 로그인 성공!");
					find = true;
					break;
				}
			}
			if(!find) {
				System.out.println("로그인 실패");
			}
			
		}else if(menu == 3) {
			System.out.println(" ==> 회원목록");
			System.out.println("이름\t아이디\t비밀번호");
			for(int i=0; i<cnt; i++) {
				list[i].print();
			}
			
		}else if(menu == 0) {
			break;
			
		}else{
			System.out.println("잘못된 입력입니다.");
			
		}
		
		System.out.println("===========================");
		System.out.println();
	}
	System.out.println("\n프로그램 종료");
	System.out.println("===========================");
	
}

 

 

2. ArrayList

// 배열
String[] a = new String[10];	// 배열 생성
a[0] = "홍길동";		// 값 입력

// a 배열의 크기만큼 반복하여 출력
for(int i=0; i<a.leght; i++) {
	System.out.println(a[i]);
}
// ArrayList
import java.util.ArrayList;

	ArrayList<String> b = new ArrayList<String>();	// 리스트 생성
	b.add("이순신");				// 값 입력
	b.add("심청이");
	b.add("장동건");
	
	// b 리스트의 크기만큼 반복하여 출력
	for(int i=0; i<b.size(); i++) {
		System.out.println(b.get(i));
	}
	
	// foreach로 출력
	for(String i : b) {
		System.out.println(i);
	}
  • ArrayList는 배열과 달리 크기가 지정되어있지 않고, 값을 추가, 삭제하는 것에 따라 크기가 달라진다.
  • 배열의 크기는 leght인 것처럼, 리스트의 크기는 size다.
  • 방이 존재하지 않는 배열이라고 기억하면 편할 것 같다. (값을 집어넣으면 방이 생성됨)
add() 괄호 안 값 추가
get() 괄호 안 인덱스 번호 값 호출
set() 괄호 안 인덱스 번호 값 수정
remove() 괄호 안 인덱스 번호 값 삭제
size 저장된 값의 크기

 

 2-1) 예제_Account

  • Account
더보기
// import
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

 

// 필드
private String name;	// 예금주
private String account;	// 계좌번호
private String pw;		// 비밀번호
private int balance;	// 잔액
private String date;	// 가입일
private DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

 

// 생성자
public Account() {
	String now= dtf.format(LocalDateTime.now());
	this.date = now;
}
public Account(String name, String account, String pw) {
	this();		// 위에 있는 생성자를 실행
	this.name = name;
	this.account = account;
	this.pw = pw;
	this.balance = 0;
}

 

// 메서드
public void deposit(int money) {	// 입금
	System.out.println("입금 전 잔액: "+balance);
	this.balance += money;
	System.out.println("입금 후 잔액: "+balance);
}
//public int withdraw(int money) {	// 출금
//	if(this.balance >= money) {
//		this.balance -= money;
//		return balance;
//	}else {
//		return balance;
//	}
//}
public boolean withdraw(int money) {	// 출금
	if(this.balance >= money) {
		this.balance -= money;
		return true;
	}else {
		return false;
	}
}
public void setName(String name) {
	this.name = name;
}
public String getName() {
	return name;
}
public void setAccount(String account) {
	this.account = account;
}
public String getAccount() {
	return account;
}

public void print() {
	System.out.printf("%s\t%s\t%s\t%,d원\t%s\n",name,account,pw,balance,date);
}

 

  • Util
더보기
import java.util.Scanner;

 

// 숫자체크 메서드
public int numberCheck(String a, Scanner sc) {
	System.out.print(a);
	while(true) {
		if(sc.hasNextInt()) {
			return sc.nextInt();
		}else {
			sc.nextLine();
			System.out.println(" > 숫자를 입력해주세요.");
			System.out.print(a);
		}
	}
}
//public int numberCheck1(String a, Scanner sc) {
//	System.out.print(a);
//	do {
//		if(sc.hasNextInt()) {
//			return sc.nextInt();
//		}else {
//			sc.nextLine();
//			System.out.println(" > 숫자를 입력해주세요.");
//			System.out.print(a);
//		}
//	}while(true);
//}

 

// 글자수체크	(내가 한 것/두번 입력받게 코드를 짜서 선생님께 도움받았음)
public String mCheck(String a, Scanner sc) {
	while(true) {
		System.out.print(a);
		String m = sc.next();
		if(m.length()<5 && m.length()>0) {
			return m;
		}else {
//			sc.nextLine();	// 여기서 필요없음
			System.out.println(" > 5자 미만으로 입력해주세요.");
		}
	}
}
	

// 글자수 체크	(선생님이 한 것)
public String lengthCheck(String a, Scanner sc) {
	while(true) {
		System.out.print(a);
		if(sc.hasNextInt()) {
			String b = sc.nextInt()+"";
			if(b.length() == 4) {
				return b.substring(0,2)+"-"+b.substring(2);
                // 계좌번호 123-45 처럼 출력
			}
			System.out.println(" > 4자로 입력하세요.");
			sc.nextLine();
		}else {
			System.out.println(" > 숫자만 입력하세요.");
			sc.nextLine();
		}
	}
}

 

  • AccountMain
더보기
import java.util.ArrayList;
import java.util.Scanner;

 

Scanner sc = new Scanner(System.in);
ArrayList<Account> list = new ArrayList<Account>();
Util util = new Util();

 

 

while(true) {
	System.out.println("=============lol은행=============");
	System.out.println("1.계좌생성 2.입금 3.출금 4.계좌목록 5.조회 0.종료");
	int menu = util.numberCheck("메뉴입력> ",sc);
	
	System.out.println();
	
	if(menu == 1) {
		System.out.println(" ===> 계좌생성");
		String name = util.mCheck("예금주> ",sc);
		String account = util.mCheck("계좌번호> ",sc);
		String pw = util.mCheck("비밀번호> ",sc);
		Account a = new Account(name, account, pw);
		list.add(a);
		
		System.out.println(name+"님, 계좌가 생성되었습니다.");
		
	}else if(menu == 2) {
		System.out.println(" ===> 입금");
		System.out.println("입금할 계좌번호> ");
		String inAccount = sc.next();
		boolean find = false;
		for(Account a : list) {
			if(a.getAccount().equals(inAccount)) {
				System.out.println(" > 계좌번호가 확인되었습니다.");
				int inMoney = util.numberCheck("입금할 금액> ",sc);
				a.deposit(inMoney);
				System.out.println(" > 입금이 완료되었습니다.");
				find = true;
				break;
				
			}
		}
		if(!find) {
			System.out.println(" > 조회할 수 없는 계좌입니다.");
		}
		
	}else if(menu == 3) {
		System.out.println(" ===> 출금");
		System.out.println("출금할 계좌번호> ");
		String outAccount = sc.next();
		boolean find = false;
		for(Account a : list) {
			if(a.getAccount().equals(outAccount)) {
				System.out.println(" > 계좌번호가 확인되었습니다.");
				int outMoney = util.numberCheck("출금할 금액> ",sc);
				if(a.withdraw(outMoney)) {	// true가 리턴되면 출금
					System.out.println(" > 출금이 완료되었습니다.");
				}else {		// false가 리턴되면 잔액부족
					System.out.println(" > 잔액이 부족합니다.");
				}
				find = true;
				break;
			}
		}
		if(!find) {
			System.out.println(" > 조회할 수 없는 계좌입니다.");
		}
		
	}else if(menu == 4) {
		System.out.println(" ===> 계좌목록");
		System.out.println("예금주\t계좌번호\t비밀번호\t잔액\t가입날짜");
		System.out.println("=============================================");
		for(Account a : list) {
			a.print();
		}
		
	}else if(menu == 5) {
		System.out.println(" ===> 조회");
		System.out.print("조화할 계좌번호> ");
		String seachAcc = sc.next();
		boolean find = false;
		for(Account a : list) {
			if(a.getAccount().equals(seachAcc)) {
				System.out.println("예금주\t계좌번호\t비밀번호\t잔액\t가입날짜");
				System.out.println("=============================================");
				a.print();
				find = true;
				break;
			}
		}
		if(!find) {
			System.out.println(" > 조회할 수 없는 계좌입니다.");
		}
		
	}else if(menu == 0) {
		System.out.println(" ===> 종료");
		
		break;
	}else {
		System.out.println(" > 존재하는 메뉴를 선택해주세요.");
	}
	
	sc.nextLine();
	System.out.println();
}

System.out.println("===============================");

 

 

3. static

  • 클래스 변수(정적필드)
  • class에 붙어서 하나만 존재할 수 있는 변수
  • 메인에서 접근할 때, 클래스명으로 접근

 


 

질문한 내용이나 어려웠던 점 메모

 - 2-1의 Util, 글자수 체크 메서드

  • 코드를 잘못짜서 입력을 두번 받아야 넘어갈 수 있게 되어서 줄이는 방법을 질문했다.
  • 내가 메서드 안에서 sc.next();를 두번 사용해서 그런 결과가 출력됐던 것을 확인 받았다. 나는 sc.next();를 if 조건에서 한 번, 리턴할 때 한 번 썼는데, 이게 입력을 두 번 받게 되는 결과가 된 것이었다.
  • 변수를 하나 선언하면서 값을 저장하고 그 값을 리턴하는 방식으로 해결했다.

 


 

전체 피드백

  • 연휴동안 열심히 놀아서 그런지 수업을 듣는데 조금 힘들었다. 

 


728x90
1 ··· 6 7 8 9 10 11 12 ··· 27