190118_Day9 복습, 삼항연산자, 클래스 객체 비교, 오토박싱 언박싱
//3조 발표 후 ~! 스위치문의 간결함!
package SwitchTest;
public class SwitchTest
{
public static void main(String[] args)
{
final int SEARCH = 1;
final int INCREMENT = 2;
final int DECREMENT = 3;
final int EXIT = 4; // 상수형 final 변수라 대문자 변수명
int su = 1;
switch (su) {
case SEARCH : System.out.println(" 검색 "); break; // case 뒤에 변수는 못넣고 상수만 넣을 수 있다.
case INCREMENT : System.out.println(" 증가 "); break;
case DECREMENT : System.out.println(" 감소 "); break;
case EXIT : System.out.println(" 종료 "); break;
default:
break;
}
} //main
}
복습
배열
한개의 변수명에 여러 개의 데이터를 저장하기 위해! 단, 데이터들은 같은 자료형
통신할때, 데이터 관리가 매우 편해진다! 변수명 하나만 건내면 안에 내용 열개 백개를 보낼 수 있음
여러 개의 데이터를 변수명 한 개를 사용해 전달, 배열 인덱스 사용 =>> for문 사용 : 전체 데이터를 검색!
형식
배열선언과 초기화! =>> 프로그램내에 확정된 데이터가 있을 때 사용
- 자료형 [] 배열명 = {value_list};
//자료형 [] 배열명 = { 데이터1, 데이터2, 데이터3 }; int [] nums = { 100, 200, 300 }; // ㅁㅁㅁ 방을 만들고 그 안에 100, 200, 300을 넣어줌 // 번지는 nums[0] nums[1] nums[2]
배열 객체 생성 =>> 프로그램 생성 중 데이터 입력
- 자료형 [] 배열명 = new 자료형 [배열 크기] //형식은 꼭 외워줘!
int [] nums = new int [3]; nums[0] = 10; nums[1] = 20; nums[2] = 30;
2차원 배열 객체 생성
- 자료형 [] [] 배열명 = new 자려형 [행크기] [열크기];
int [][] nums = new int [3][2]; //3*2 : 6개의 정수데이터 입력 준비 num[0][0] = 10; num[0][1] = 20; num[1][0] = 30; num[1][1] = 40; num[2][0] = 50; num[2][1] = 60;
10 20 30 40 50 60 java
int [][] nums = new int [3][]; //가변길이열
//ㅁㅁ nums[0] = new int[2];
//ㅁㅁㅁ nums[1] = new int[3];
//ㅁ num[2] = new int[1];
newA();
- 100 + 200
- new A().hello();
- A a = new A();
- 변수 su + 200
- a.hello();
- A [] aa = new A[5];
- 배열 su[0] + 200;
- aa[0] = a;
- aa[0].hello();
어제 미션
//mission 내가 푼것
package mission;
public class Mission0417
{
public static void main(String[] args)
{
int su[] = { 1, 2, 3, 4, 5};
// 배열 크기 (su.length) =>> 5
System.out.println("================<1번>===============");
for( int i = 0; i < su.length; i++ )
{
System.out.print(su[i] + "\t");
}
System.out.println();
System.out.println("================<2번>===============");
for( int i = su.length - 1 ; i >= 0; i-- )
{
System.out.print(su[i] + "\t");
}
System.out.println();
System.out.println("================<3번>===============");
int su2[][] = { { 1 }, { 1, 2 }, { 1, 2, 3 } };
for( int i = 0; i < su2.length; i++)
{
for( int j = 0; j <= su2[i].length - 1; j++)
{
System.out.println("su[ " + i + " ] [ " + j + " ] = " + su2[i][j]);
}
}
System.out.println();
System.out.println("================<4번>===============");
int su3[] = {5, 5, 5, 5, 5};
for ( int i = 0; i < su.length; i ++)
{
su3[i] = su[i];
}
System.out.println(su[2]);
//이거 원본도 한번 출력해 보자!
System.out.println();
System.out.println("================<5번>===============");
int temp;
temp = su[0];
su[0] = su[4];
su[4] = temp;
temp = su[1];
su[1] = su[3];
su[3] = temp;
temp = su[0];
for (int i = 0; i < su.length; i++)
{
System.out.print(su[i] + "\t");
}
System.out.println();
System.out.println("================<6번>===============");
temp = su[0];
su[0] = su[4];
su[4] = temp;
temp = su[1];
su[1] = su[3];
su[3] = temp;
temp = su[0];
for (int i = 1; i < su.length; i+=2)
{
System.out.print(i+ "번지" + "\t");
}
System.out.println();
System.out.println("================<7번>===============");
temp = su[0];
for (int i = 0; i < su.length; i+=2)
{
System.out.print(su[i] + "\t");
}
}
}
//선생님 해설
//mission
package MissionA;
class A
{
void hello()
{
System.out.println("안녕");
}
}
public class MissionA
{
public static void main(String[] args)
{
int su[] = { 1, 2, 3, 4, 5, 60};
// 배열 크기 (su.length) =>> 6
A a = new A();
a.hello();
a.hello();
System.out.println("=================");
new A().hello();
new A().hello();
System.out.println("=================");
A []arr = new A[3];
//A [] arr = {null, null, null};
arr[1] = new A();
//A [] arr = {null, new A(), null};
// arr[0].hello(); 아직 arr[0]이 할당 못받았다. NullPinterException 발생
arr[1].hello();
System.out.println( "arr 배열 크기 : " + arr.length );
// int []su = { 1, 2, 3, 4, 5 };
//인덱스 0 1 2 3 4
//arr.length ? =>> 0, 3
System.out.println("\n===============");
System.out.println("문제 1");
for (int i = 0; i < su.length; i++)
{
System.out.print( su[i] );
if(i < 4)System.out.print(", ");
}
System.out.println("\n===============");
System.out.println("문제 2");
for (int i = su.length-1 ; i > -1; i--)
{
System.out.print( su[i] );
if(i>0)System.out.print(", ");
}
System.out.println("\n===============");
System.out.println("문제 3");
//2차원 배열을 다중for문을 통해 출력
//행 0 1 2
int su2[][] = { { 1 }, { 1, 2 }, { 1, 2, 3} };
//열 0 0 1 0 1 2
for( int i = 0; i < su2.length; i++ ) // 기준 : 행 인덱스
{
for( int j = 0; j < su2[i].length ; j ++ ) //각 행의 열 인덱스
{
System.out.println("su2[" + i + "][" + 0 + "]번지 = " + su2[i][j]);
}
}
System.out.println("\n===============");
System.out.println("문제 4");
int su3[] = new int[ su.length ]; // new int[5]
su3 = su; // su3과 su는 참조변수이다.(속성변수가 아닌) , 이는 메모리 값의 주소! 주소 값을 전해준다.
//su3[2] = 33; // 이렇게 해버리면 원본까지 바뀌어 버린다.
for (int i = 0; i < su3.length; i++)
{
System.out.println("su3[" + i + "] = " + su3[i]);
}
System.out.println("원본출력");
for (int i = 0; i < su3.length; i++)
{
System.out.println("su[" + i + "] = " + su[i]);
}
//원본까지 바뀌지 않기 위해
for (int i = 0; i < su.length; i++)
{
su3[i] = su[i];
System.out.print(su3[i]);
if(i <4 )System.out.print(", ");
}
/*출력값
문제4)
su3[0]=12
su3[1]=2
su3[2]=33
su3[3]=4
su3[4]=5
su3[5]=65
===원본su배열출력===
su[0]=12
su[1]=2
su[2]=3
su[3]=4
su[4]=5
su[5]=65
*/
System.out.println("\n===============");
System.out.println("문제 5");
//데이터 교환
//int j = 4; //교환할 오른 쪽 데이터 인덱스 4 3
int temp;
for(int i = 0, j = su.length - 1 ; i < su.length/2; i++, j--) //교환할 왼쪽 데이터 인덱스 0, 1
{
temp = su[i];
su[i] = su[j];
su[j] = temp;
//j--;
}
for(int i = 0; i < su.length; i++)
{
System.out.println("su[" + i + "] = " + su[i]);
}
/*
문제5)
su[0]=65
su[1]=5
su[2]=4
su[3]=3
su[4]=2
su[5]=12
*/
System.out.println("\n===============");
System.out.println("문제 6 홀수번지 출력하기");
for (int i = 0; i < su.length; i++)
{
if(i%2==1)//홀수번지 (==인덱스) 조건
System.out.println( "su["+i+"] = " + su[i]);
}
System.out.println("\n===============");
System.out.println("문제 7 홀수번지 출력하기");
for (int i = 0; i < su.length; i++)
{
if(su[i]%2==1)//홀수데이터값 조건
System.out.println( "su["+i+"] = " + su[i]);
}
}//main
}
<삼항연산자>
형식
조건식 ? A : B (조건식) ? A : B => 조건식의 결과가 true였을 때 A리턴, 결과가 false였을 대 B리턴
사용 예)
boolean b = (3<4) ? true : false; // ==> b변수에 true 저장 int su=1; String gender = su%2!=0 ? "남자" : "여자"; // ==> gender변수에 "남자" 저장 int su2 = ('남' == '여') ? 100 : 300; // ==> su2변수에 300 저장
<클래스 객체 비교>
클래스 참조변수 == 클래스 참조변수2 =>> 메모리 주소 비교
- 예
A a1 = new A(); A a2 = new A(); System.out.println(a1 == a2) //결과값 false : 서로 다른 메모리 주소 a2 = a1 //a1이 갖은 주소를 a2에 전달 System.out.println(a1 == a2) //결과값 true : 서로 같은 메모리 주소
위와 비교해서 참고
- 속성변수1 == 속성변수 =>> 데이터 값 비교!
- 예
int su1 = 30; int su2 = 30; System.out.println(su1==su2) //결과값 true : 값은 값을 갖는다.
int su1; // 속성변수 (기본 자료형으로 선언된 변수)
su1 = 100;
su1.~ (x)
Integer su2; // 참조변수!! (데이터의 위치는 메모리이고 그 메모리의 주소를 담는 변수!)
su2 = new Integer(100);
su2.~ (o)
오토박싱 언박싱
- JDK 5버전 이후 지원
- int, double과 같은 기본형 자료형의 포장 클래스가 있어, 기본형을 객체로 다루어야 할 경우에 사용 가능
- 포장하는 클래스, 기본 자료형을 포장한다!
- 자바의 모든것은 객체?! =>> 객체가 아닌것들도 존재 =>> 기본 자료형(빈번한 연산을 하기 위해 높은 성능을 위해 객체화 하지 않은 듯?!)
- 객체가 아니어서 컬렉션 또는 다형성 제네릭 이용시에 불편!
- 그래서 래퍼 클래스를 사용한다!
- 기본자료형과 래퍼간 == 연산과 equals연산 모두 성립.
- 하지만 래퍼와 래퍼 사이는 equals 성립, == 성립 안함. 단 대소 비교 > < 가능
int su3 = new Integer(300);
Integer su4 = 300;
기본자료형 래퍼클래스 (위치: 기본패키지 java.lang)
byte —-> Byte
short —-> Short
int —-> Integer (정수와 관련된 속성,메소드를 지원하는 클래스)
long —-> Long
float —-> Float
double —-> Double
char —-> Character
boolean —-> Boolean생성자는 위와 같이 해당하는 기본형을 줄 수도 있고 문자열로 줄 수도 있다. 문자열로 주는 경우 형식에 맞아야 함
근데 래퍼클래스 사용시 참조형끼리 연산 불가… 다시 자료형으로 변환하여 연산…
그래서 오토박싱과 언박싱이 등장!
오토박싱은 기본자료형을 래퍼클래스로 감싸주지 않아도 박싱
Integer k = 2; // 내부적 동작 Integer a = new Integer(2); Object L = 2 // Object o = new Integer(2) 로 동작, 다형성
언박싱은 기본자료형으로 변환 안해도 포장을 풀어줌
Integer k = new Integer(2); int i = a; // 내부적으로 int i = a.intValue(); 로 동작
박싱이라는게 기본형->참조형 변환
언박싱은 참조형-> 기본형 변환
래퍼클래스 이용하여 문자열을 기본 자료형으로 변환 가능, 문자열을 래퍼클래스로 변환 가능
궁금상자
- 배열은 같은 자료형으로 모여야 하는데 , 그럼 2차원 배열에서 안에 배열은 스트링 밖에 배열은 숫자 이렇게도 가능할까?
- boolean 기본 값 false? char 는 '/u0000' 맞나?
for(int i = 0; i < su.length; i++)
{
for ( int j = 0; j < i; j++)
{
if(su[i] == su[j])
{
su[j]--;
break;
}
}
}
'클라우드 기반 웹 개발자 과정 공부 > JAVA' 카테고리의 다른 글
190422_Day11 복습, String, Vector (0) | 2019.04.22 |
---|---|
190519_Day10 복습, 미션풀이, not연산자, NullPointException, String (0) | 2019.04.19 |
190417_Day8 라인단위 입력, 클래스 객체 생성, 배열, 2차원 배열 (0) | 2019.04.17 |
190415 Day7 this, interface, mission, 배열, 자바빈즈, 추상클래스- (0) | 2019.04.16 |
190415 Day6 이클립스 설치, 접근지정(제한)자, 자기참조연산자, 인터페이스, final, 클래스와 인터페이스 간의 상속 문법 (0) | 2019.04.15 |