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+"입니다.");
}
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("몰라요");
}
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();
// 인스턴스 변수
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 class SimpleAdder {
private int totalNum;
public SimpleAdder adder(int num) {
this.totalNum += num;
return this;
}
public int getTotalNum() {
return totalNum;
}
}
// 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도 사용할 수 있다.
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): 문자열이 다르다.
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();
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);
}
}
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를 사용해야 한다고 그래서 많이 헷갈렸다.
전체 피드백
모르겠으면 일단 외울것!!!
선생님이 바뀌면서 방식을 따라가기 너무 힘들었다..게다가 잠을 이상하게 잔 바람에 컨디션 관리에 실패하고 말았다. 제대로 컨디션 조절하기..!
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+" 학생 등록 완료!");
아직 class 사용이 익숙치 않아서 생성자1을 사용하여 객체 생성하기를 직접 적었다가 나중에서야 바꿨다.
오후시간에 각자 프로그램을 하나 만들어보라고 하셨는데 중복 없이 랜덤으로 하는게 저번에 됐었는데 이번에 다른 방법으로 하려니까 자꾸 오류가 나서 나중에 다시 해보기로 했다. 이것만 해결하면 프로그램을 완성하게 되니까 조금씩 건드려봐야겠다. (블로그에 정리해서 올릴 수 있으면 올리기!)
Scanner sc = new Scanner(System.in);
ArrayList<Board> list = new ArrayList<Board>();
ArrayList<User> ulist = new ArrayList<User>();
int loginIndex = -1;
// 배열
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는 배열과 달리 크기가 지정되어있지 않고, 값을 추가, 삭제하는 것에 따라 크기가 달라진다.