public static void main(String[] args)
이다public void init()
이다.: 실수형 타입은 쓸 수 없다
: break 는 switch를 벗어나라
[형식]
switch(정수 or 문자 or 문자열 or 식) {
case 값1: break;
case 값2: break;
case 값3: break;
default :
}
for
while
do~while
for
[형식]
for(변수명=초기치; 조건치; 증감치){
참일때
}
while
[형식]
while(조건){
참일때
}
do~while
[형식]
do{
참일때
}while(조건);
: switch, 반복문(for, while, do~while)를 벗어날 때
: 자신이 소속된 곳 1번만 벗어난다.
: 만약에 2개 이상 벗어나려면 라벨을 사용 한다
: 반복문(for, while, do~while)의 끝으로(}) 무조건 이동
: 자신이 소속된 끝으로(}) 무조건 이동
: 만약에 2개 이상 반복문 끝으로 이동하려면 라벨을 사용 한다
ex)
1. int[] ar = {10, 20, 30};
2. int[] ar;
ar = new int[3];
ar[0] = 10;
ar[1] = 20;
ar[2] = 30;
3. int[] ar = new int[]{10, 20, 30};
4. int[] ar = new int[3]{10, 20, 30}; - X
5. int[] ar;
ar = {10, 20, 30}; - X
가. 고정길이
나. 가변길이
: 모의실험을 목적으로 사용
: 실제 사물의 속성(데이터)과 기능(메소드)을 정의하여 가상세계를 구현
: 모의실험을 통해 많은 시간과 노력을 절감
: 객체지향이론은 캡슐화, 상속, 추상화 개념
: 코드의 재사용이 높다
: 유지보수가 용이하다
: 캡슐화, 상속, 다형성의 특징
객체를 정의한 것
[형식]
class 클래스명 {
접근제한자 자료형 필드명;
접근제한자 메소드() {
}
class Inner클래스명 {
}
}
배열
아무 파일이나 다 받을 수 있어 - Object클래스
package class_;
public class SungJukMain2 {
public static void main(String[] args) {
SungJuk[] ar = new SungJuk[3]; // 객체 배열
ar[0] = new SungJuk();
ar[1] = new SungJuk();
ar[2] = new SungJuk();
ar[0].setData("홍길동", 96, 85, 78);
ar[1].setData("코난", 100, 78, 55);
ar[2].setData("라이언", 80, 76, 85);
for(int i = 0; i<ar.length; i++) {
System.out.println("객체 ar["+i+"] = "+ar[i]);
ar[i].calcTot();
ar[i].calcAvg();
ar[i].calcGrade();
System.out.println(ar[i].getName()+"\t"
+ar[i].getKor()+"\t"
+ar[i].getEng()+"\t"
+ar[i].getMath()+"\t"
+ar[i].getTot()+"\t"
+String.format("%.2f",ar[i].getAvg())+"\t"
+ar[i].getGrade());
}//for
System.out.println("----------------------------------------------------");
for(SungJuk data : ar) { // ar의 (배열) 크기만큼 for문을 반복합니다.
data.calcTot();
data.calcAvg();
data.calcGrade();
System.out.println(data.getName()+"\t"
+data.getKor()+"\t"
+data.getEng()+"\t"
+data.getMath()+"\t"
+data.getTot()+"\t"
+String.format("%.2f",data.getAvg())+"\t"
+data.getGrade());
}
}
}
하나의 클래스 안에서 똑같은 이름의 메소드가 2개 이상 존재 할 때
인수(매개변수) 형이 틀리거나
인수(매개변수) 개수가 틀린 경우
class AA {
public void sub(int a){}
}
class BB{
public void sub(int a){}
public void sub(String a){}
public void sub(char a){}
public void sub(int a, int b){}
public void sub(){}
public int sub(int a){}
}
객체 초기화를 하기 위해서 (자바는 이미 초기화가 초기화되어 있음)
생성자명은 반드시 클래스명과 동일하다.
자동호출 - 클래스를 메모리에 생성 시(new 할때)
returnType(결과형)이 없다.
-> 앞에 아무것도 없음 (쓰지마, void도!)
클래스 안에 생성자가 하나도 없을 시에는 자동으로 기본(default) 생성자 호출
기본 생성자 - 인수가 없는 메소드
private int a; - 생성자 setter
public void setA(int a){
}
1번 public Test(int a){
}
2번 public Test( ){ } <- 기본 생성자
Test t = new Test(숫자) - 1번
Test t = new Test( ) - 2번
return 형 메소드명(인수형 인수, 인수형 인수,.....)
ex)
int sub(int x, int y){ }
char sub(String x){ }
void sub(int x) - 정수형으로 하나 들어오지만 return이 없음
int, char, void 아무것도 쓰지 말아야됨.
package constructor;
public class ConstructorMain {
private String name;
private int age;
public ConstructorMain() { // 괄호 안에 아무것도 없는 기본 생성자
System.out.println("기본 생성자");
}
public ConstructorMain(String name) {
this.name = name;
}
public ConstructorMain(int age) {
this.age = age;
}
public static void main(String[] args) {
ConstructorMain aa = new ConstructorMain();
System.out.println(aa.name + "\t" + aa.age);
System.out.println("----------------------");
ConstructorMain bb = new ConstructorMain("홍길동");
System.out.println(bb.name + "\t" + bb.age);
System.out.println("----------------------");
ConstructorMain cc = new ConstructorMain(25);
System.out.println(cc.name + "\t" + cc.age);
System.out.println("----------------------");
}
}
생성자 끼리는 호출 가능
Overload 된 다른 생성자를 호출할 때
생성자에서 반드시 첫줄에 써야 한다.
public ConstructorMain(String name) {
this.name = name;
}
public ConstructorMain(int age) {
this("어피치"); // Overlodad된 다른 생성자 호출
this.age = age;
this("어피치");
가 위 String name을 호출함.
그리고 생성자 안에서 생성자를 호출 하려면 무조건 첫번째 줄에 위치해야 한다.
public ConstructorMain() { // 괄호 안에 아무것도 없는 기본 생성자
System.out.println("기본 생성자");
}
public ConstructorMain(String name) {
this();
this.name = name;
}
public ConstructorMain(int age) {
this("어피치");
this.age = age;
public void ConstructorMain() 하면 기본 생성자가 아닌게 된다.
/*
클럽 회원관리 프로그램 작성
여기는 폐쇄적인 모임으로 회원은 총 5명으로 한다
회원의 정보는 이름, 나이, 핸드폰, 주소로 설정한다
회원 가입, 수정, 출력 프로그램을 작성하시오
각각의 메소드로 구성하시오
[실행결과]
menu()
번호 :
이름 입력 :
나이 입력 :
핸드폰 입력 :
주소 입력 :
수정 : update()
핸드폰 번호 입력 : 010-1111-1111
회원 정보를 찾을 수 없습니다.
또는
핸드폰 번호 입력 : 010-1234-5678
이름 나이 핸드폰 주소
홍길동 25 010-1234-5678 서울
수정 할 이름 입력 :
수정 할 핸드폰 입력 :
수정 할 주소 입력 :
회원 정보 수정 완료
삭제 : delete()
핸드폰 번호 입력 : 010-1111-1111
회원 정보를 찾을 수 없습니다.
또는
핸드폰 번호 입력 : 010-1234-5678
회원 정보 삭제 완료
*/
package constructor;
public class MemberMain {
public static void main(String[] args) {
//MemberService클래스 안에 menu()호출->new
MemberService ms = new MemberService();
ms.menu(); // menu 함수 호출
System.out.println("프로그램을 종료합니다.");
}
}
------------------------------------------------------------------
package constructor;
public class MemberDTO {
// Data Transfer Object 1인분 - MemeberVO (Value Object)이것과 비슷
private String name;
private int age;
private String phone;
private String address;
// 인수 4개를 받는 생성자 잡기
public MemberDTO(String name, int age, String phone, String address) {
this.name = name;
this.age = age;
this.phone = phone;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
----------------------------------------------------------
package constructor;
import java.util.Scanner;
public class MemberService { // 딱 1인분만 한다.
//배열로 만든다
Scanner scan = new Scanner(System.in);
MemberDTO[] ar = new MemberDTO[3];
public MemberService() {
System.out.println("기본 생성자");
}
public void menu(){
int num;
while(true) {
System.out.println();
System.out.println("***********");
System.out.println(" 1. 가입");
System.out.println(" 2. 출력");
System.out.println(" 3. 수정");
System.out.println(" 4. 삭제");
System.out.println(" 5. 끝");
System.out.println("***********");
System.out.print (" 번호 : ");
num = scan.nextInt();
if(num==5) break; // while문을 벗어나라
if(num==1)
insert(); //가입하러 가세요;
else if(num==2)
display();
else if(num==3)
update();
else if(num==4)
delete();
}
}
public void insert() {
int i;
for(i=0; i<ar.length; i++) {
if(ar[i] == null) {
System.out.print("이름 입력 : ");
String name = scan.next();
System.out.print("나이 입력 : ");
int age = scan.nextInt();
System.out.print("핸드폰 입력 : ");
String phone = scan.next();
System.out.print("주소 입력 : ");
String address = scan.next();
ar[i] = new MemberDTO(name, age, phone, address);
System.out.println("가입 완료");
break; // for문을 벗어나라
} //if문
}// for문
if(i == ar.length) {
System.out.println("회원 마감");
}
}
public void display() {
for(int i=0; i<ar.length; i++) {
if(ar[i]!=null) {System.out.println("이름 : " + ar[i].getName());
System.out.println("나이 : " + ar[i].getAge());
System.out.println("전화번호 : " + ar[i].getPhone());
System.out.println("주소 : " + ar[i].getAddress());
System.out.println("-----------");
}
}// for 문
}
public void update() {
System.out.print("핸드폰 번호 입력 : ");
String phone = scan.next();
boolean boo = false;
for(int i=0; i<ar.length; i++) {
if(ar[i] != null && ar[i].getPhone().equals(phone)) {
System.out.println("수정 할 이름 입력 : ");
String name = scan.next();
System.out.print("수정 할 나이 입력 : ");
int age = scan.nextInt();
System.out.println("수정 할 핸드폰 입력 : ");
String newphone = scan.next();
System.out.println("수정 할 주소 입력 : ");
String address = scan.next();
ar[i].setName(name);
ar[i].setAge(age);
ar[i].setPhone(newphone);
ar[i].setAddress(address);
System.out.println("★★★★★★★★★★★★★★★");
System.out.println("회원 정보 수정 완료");
boo = true;
break;
}
}
if (!boo) {
System.out.println("회원 정보를 찾을 수 없습니다.");
}
}
public void delete() {
System.out.print("핸드폰 번호 입력: ");
String phone = scan.next();
boolean boo2 = false;
for (int i = 0; i < ar.length; i++) {
if (ar[i] != null && ar[i].getPhone().equals(phone)) {
ar[i] = null;
System.out.println("★★★★★★★★★★★★★★★");
System.out.println("회원 정보 삭제 완료");
boo2 = true;
break;
}
}
if (!boo2) {
System.out.println("회원 정보를 찾을 수 없습니다.");
}
}
}
리터럴 (종류들을 의미)
1. 논리형 literal - true, false
2. 문자형 literal - 'A', 'K', '수",.....
3. 정수형 literal - 25, 13,.....
4. 실수형 literal - 36.25, 21850.44,....
5. 문자열 literal - "korea"
※ 문자열 자체가 reference(참조값) 이다.
※ 똑같은 내용의 문자열 리터럴은 메모리에 1번만 생성된다.
new는 할 때마다 메모리에 생성 된다
package class_;
public class StringMain {
public static void main(String[] args) {
String a = "apple"; // literal로 생성했음.
String b = "apple"; // 못잡아 b도 a의 "apple"을 가리킨다.
if(a==b) System.out.println("a와 b의 참조값은 같다");
else System.out.println("a와 b의 참조값은 다르다");
if(a.equals(b)) System.out.println("a와 b의 문자열은 같다");
else System.out.println("a와 b의 문자열은 다르다");
System.out.println();
String c = new String("apple");
String d = new String("apple");
if(c==d) System.out.println("c와 d의 참조값은 같다");
else System.out.println("c와 d의 참조값은 다르다");
if(c.equals(d)) System.out.println("c와 d의 문자열은 같다");
else System.out.println("c와 d의 문자열은 다르다");
System.out.println();
/*오늘 날짜는
오늘 날짜는 2023
오늘 날짜는 20237
e ---> "오늘 날짜는 2023719"
문자열은 편집이 안된다. -> 메모리에 4번의 생서이 일어난다.
JVM(자바가상머신)에 의해서 삭제 시 Garbage Collector로 보낸다
Garbage Collector가 실행되면 컴퓨터는 멈춘다
*/
String e = "오늘 날짜는 " + 2023 + 7 + 19;
System.out.println("e = " + e);
System.out.println();
System.out.println("문자열 크기 = " + e.length());
for(int i=0; i<e.length(); i++) {
System.out.print(e.charAt(i)+" ");
}
System.out.println();
System.out.println("부분 문자 열 추출 = "+ e.substring(7));
System.out.println("부분 문자 열 추출 = "+ e.substring(7,11)); //2023
System.out.println("대문자 변경 = " + "Hello".toUpperCase());
System.out.println("소문자 변경 = " + "Hello".toLowerCase());
System.out.println("문자열 검색 = " + e.indexOf("짜"));
System.out.println("문자열 검색 = " + e.indexOf("날짜"));
System.out.println("문자열 검색 = " + e.indexOf("개바부")); // -1
System.out.println("문자열 치환 = " + e.replace("날짜", "일자"));
}
}
package class_;
public class StringMain2 {
public static void main(String[] args) {
String original = "aabba";
System.out.println("문자열 입력 : " + original);
String current = "aa";
System.out.println("현재 문자열 입력 : " + current);
String change = "dd";
System.out.println("바꿀 문자열 입력 : " + change);
System.out.println(original.replace(current, change));
System.out.println();
String original1 = "aAbbA";
System.out.println("문자열 입력 : " + original1);
String current1 = "aa";
System.out.println("현재 문자열 입력 : " + current1);
String change1 = "dd";
System.out.println("바꿀 문자열 입력 : " + change1);
System.out.println(original1.toLowerCase().replace(current1, change1));
System.out.println();
String original2 = "aabbaa";
System.out.println("문자열 입력 : " + original2);
String current2 = "aa";
System.out.println("현재 문자열 입력 : " + current2);
String change2 = "dd";
System.out.println("바꿀 문자열 입력 : " + change2);
System.out.println(original2.toLowerCase().replace(current2, change2));
System.out.println();
String original3 = "AAccaabbaaaaatt";
System.out.println("문자열 입력 : " + original3);
String current3 = "aa";
System.out.println("현재 문자열 입력 : " + current3);
String change3 = "dd";
System.out.println("바꿀 문자열 입력 : " + change3);
System.out.println(original3.toLowerCase().replace(current3, change3));
System.out.println();
String original4 = "aabb";
System.out.println("문자열 입력 : " + original4);
String current4 = "aaaaa";
System.out.println("현재 문자열 입력 : " + current4);
String change4 = "ddddd";
System.out.println("바꿀 문자열 입력 : " + change4);
int count = countOccurrences(original4.toLowerCase(), current4.toLowerCase());
if (count == 0) {
System.out.println("원하는 문자열이 없습니다. "
+"\n"+ "치환 할 수 없습니다.");
}else {
System.out.println(original4.toLowerCase().replace(current4, change4));
}
}
public static int countOccurrences(String original4, String current4) {
int count = 0;
int index = 0;
while ((index = original4.indexOf(current4, index)) != -1) {
count++;
index += current4.length();
}
return count;
}
}
package class_;
import java.util.Scanner;
public class StringMain2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("문자열 입력: ");
String original = scan.nextLine();
System.out.print("현재 문자열 입력: ");
String current = scan.nextLine();
System.out.print("바꿀 문자열 입력: ");
String change = scan.nextLine();
int count = countOccurrences(original.toLowerCase(), current.toLowerCase());
if (count == 0) {
System.out.println("원하는 문자열이 없습니다. 치환 할 수 없습니다.");
} else {
String replaced = original.replace(current, change);
System.out.println(replaced);
System.out.println(count + "번 치환");
}
}
public static int countOccurrences(String original, String current) {
int count = 0;
int index = 0;
while ((index = original.indexOf(current, index)) != -1) {
count++;
index += current.length();
}
return count;
}
}
예제들
package class_;
public class ComputeArray {
private int x;
private int y;
private int sum;
private int sub;
private int mul;
private double div;
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public void calc() {
sum = x + y;
sub = x - y;
mul = x * y;
div = (double)x / y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getSum() {
return sum;
}
public int getSub() {
return sub;
}
public int getMul() {
return mul;
}
public double getDiv() {
return div;
}
}
--------------------------------
package class_;
public class ComputeMainArray {
public static void main(String[] args) {
ComputeArray[] com = new ComputeArray[3];
for (int i=0; i<com.length; i++) {
com[i] = new ComputeArray();
}// for
com[0].setX(320); com[0].setY(258);
com[1].setX(258); com[1].setY(127);
com[2].setX(572); com[2].setY(326);
for(ComputeArray data : com) {
data.calc();
System.out.println(data.getX()+"\t"+
data.getY()+"\t"+
data.getSum()+"\t"+
data.getSub()+"\t"+
data.getMul()+"\t"+
data.getDiv());
}
}
}
덕분에 좋은 정보 얻어갑니다, 감사합니다.