본문 바로가기
java

22.10.31 논리연산자, 증감연산자, 다중for문, 배열, ==, equals.

by SoulMania 2023. 2. 12.

ch05.zip
0.00MB
ch0304-오전.zip
0.01MB
Ex03_logicalOp_p92.java
0.00MB

package ch0304;

//논리 연산자(교재p91~)
/*논리 연산자 (&&, ||, &, |, ^, !) (p.91~93)
-논리곱(&&), 논리합(||), 배타적 논리합(^) ,논리 부정(!) 연산 수행
-피연산자는 boolean 타입만 사용 가능

*기본타입 8가지(p38) -->괄호안에 숫자는 byte
*-char(2) : ''
-정수:byte(1) < short(2) < int(4, 기본) < long(8)
-실수:float(4), double(8, 기본)
-논리형:boolean : true, false
 

if(조건1) {
//조건1 만족시 실행코드
}else if (조건n){
//조건 n만족시 실행코드
}else{
 // 모든 조건x 실행코드
 }
*/

public class Ex03_logicalOp_p92 {

public static void main(String[] args) {
//char타입 charCode변수에 'A'초기화
char code='A';
System.out.println("code="+code);//A

//int타입 charCode변수에 'A'초기화
int charCode='0';
code=(char)charCode; //강제 형변환
//int타입 charCode변수안의 값을 강제로(????)타입으로 변환하여
//char타입 code변수에 저장
System.out.println("charCode="+charCode);//65
System.out.println("(char)charCode="+code);//A


//charCode변수에 저장된 값에 따라 대문자, 소문자, 0~9 숫자로 출력
if(charCode>=65 & charCode<=90) { //65이상이면서 90이하라면
System.out.println("대문자");
}
if(charCode>=97 && charCode<=122) { //97이상이면서 122이하라면
System.out.println("소문자");
}
// if(!(charCode<48) && !(charCode>57)) { 책 내용==>48미만이 아니면서 57초과가 아니라면 
// System.out.println("소문자");
if(charCode>=48 && charCode<=57) { //48이상이면서 57이하라면
System.out.println("0~9 숫자 이군요");
}

}

}
---------------------------------------------------------------------------------------------------------------------------------

입력받는 것으로 수정

package ch0304;

import java.util.Scanner;// java.util패키지 안의 Scanner클래스를 import하겠다 라는 뜻.

//논리 연산자(교재p91~)
/*논리 연산자 (&&, ||, &, |, ^, !) (p.91~93)
-논리곱(&&), 논리합(||), 배타적 논리합(^) ,논리 부정(!) 연산 수행
-피연산자는 boolean 타입만 사용 가능

*기본타입 8가지(p38) -->괄호안에 숫자는 byte
*-char(2) : ''
-정수:byte(1) < short(2) < int(4, 기본) < long(8)
-실수:float(4), double(8, 기본)
-논리형:boolean : true, false
 

if(조건1) {
//조건1 만족시 실행코드
}else if (조건n){
//조건 n만족시 실행코드
}else{
 // 모든 조건x 실행코드
 }
*/

public class Ex03_logicalOp_p92 {

public static void main(String[] args) {
String strCode="A"; //문자열은 한글자이상

//p130 5~14라인에서 사용
//Scanner 클래스의 객체를 이용하여 콘솔을 통해 user로 부터 문자열을 입력 받기
//문법> 타입 참조변수명=new 클래스명(참조변수)
//new Scanner(System.in)는 Scanner클래스의 객체를 생성한다.
/*Scanner sc = 는
 * 생성된 Scanner클래스의 객체를 참조 sc변수에 저장한다.*/
/* sc.nextLine()는 
 * 참조변수sc를 통해 Scanner클래스의
 * nextLine()메서드를 호출하여 실행한다.
 * enter단위로 읽는다*/
/*String inputString = 는
 * user로 부터 콘솔로 입력받은 문자열을
 * String타입 inputString변수에 저장한다.*/
Scanner sc = new Scanner(System.in);  //sc.   해보면 스캐너 클래스에서 사용할 수 있는 기능들을 모두 사용 할 수 있다.  교재 130 참조
System.out.println("숫자입력하세요");

// int inputInt = sc.nextInt(); //정수로 읽어들이기
// System.out.println("inputInt="+inputInt); 

double inputDouble = sc.nextDouble(); //double(실수)로 읽어들이기
System.out.println("inputDouble="+inputDouble); 

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

// System.out.println("내용을 입력하세요");
// System.out.print(">");
// String inputString = sc.nextLine(); //문자열로 읽어들이기
// System.out.println("inputString="+inputString);
// System.out.println("==================================");
//



//char타입 charCode변수에 'A'초기화
char code='A';
System.out.println("code="+code);//A

//int타입 charCode변수에 'A'초기화
int charCode='0';
code=(char)charCode; //강제 형변환
//int타입 charCode변수안의 값을 강제로(????)타입으로 변환하여
//char타입 code변수에 저장
System.out.println("charCode="+charCode);//65
System.out.println("(char)charCode="+code);//A


//charCode변수에 저장된 값에 따라 대문자, 소문자, 0~9 숫자로 출력
if(charCode>=65 & charCode<=90) { //65이상이면서 90이하라면
System.out.println("대문자");
}
if(charCode>=97 && charCode<=122) { //97이상이면서 122이하라면
System.out.println("소문자");
}
// if(!(charCode<48) && !(charCode>57)) { 책 내용==>48미만이 아니면서 57초과가 아니라면 
// System.out.println("소문자");
if(charCode>=48 && charCode<=57) { //48이상이면서 57이하라면
System.out.println("0~9 숫자 이군요");
}

}

}




-------------------------------------------------------------------------------------------------------------------------------



package ch0304;

//논리 연산자(교재p91~)
/*논리 연산자 (&&, ||, &, |, ^, !) (p.91~93)
-논리곱(&&), 논리합(||), 배타적 논리합(^) ,논리 부정(!) 연산 수행
-피연산자는 boolean 타입만 사용 가능
-논리곱(&&) : 열거된 모든 조건들이 모두 true이어야지만 true
열거된 조건중 단 하나의 조건이라도 충족하지 않으면 false
-논리합(||) : 열거된 모든 조건 중 단 하나의 조건이라도 true면 true
열거된 조건중 단 하나의 조건도 충족하지 않으면 false

&과 &&의 차이. 처음 조건을 확인하였을 때 이미 결과가 나왔어도 1개짜리는 뒤에 조건까지 다 학인하고 2개짜리는 안보고 바로 결과산출.
&&짜리가 좋다. 효율적으로 동작(p92)

*기본타입 8가지(p38) -->괄호안에 숫자는 byte
*-char(2) : ''
-정수:byte(1) < short(2) < int(4, 기본) < long(8)
-실수:float(4), double(8, 기본)
-논리형:boolean : true, false
 

if(조건1) {
//조건1 만족시 실행코드
}else if (조건n){
//조건 n만족시 실행코드
}else{
 // 모든 조건x 실행코드
 }
*/

public class Ex03_logicalOp {

public static void main(String[] args) {
//정수타입의 score변수에 100을 할당
//int score = 100;
//데이터타입 변수=초기값; //변수선언
// int score = 70;


// --> 스위치문은 =밖에 안되서 코드가 엄청 길어져서 비추
//점수가 70점 이상이면 합격
//점수가 60점 이상이면 대기합격
//점수가 60점 미만이면 불합격

// if(score>=70) {
// //조건만족시 실행코드
// System.out.println("합격");
// }else if(score>=60){
// System.out.println("대기합격");
// }else {
// System.out.println("불합격");
// }
// System.out.println("점수 score = "+score);

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

//점수가 100점 이하 ~ 점수가 90점 이상이면 'A'
//점수가 100점 이하이면서 ~ 그리고 동시에 반드시 항상 점수가 90점 이상이면 'A' -->위에것을 풀어쓰면 이런식으로 해석

//점수가   90점 미만 ~ 점수가 80점 이상이면 'B' 
//점수가   80점 미만 ~ 점수가 70점 이상이면 'C'
//점수가   70점 미만 ~ 점수가 60점 이상이면 'D'
//점수가   60점 미만이면 'F'

int score = 88;

if(score<=100 && score>=90) {
//조건만족시 실행코드
System.out.println("학점 = "+'A');
}else if(score<90 && score>=80){
System.out.println("학점 = "+'B');
}else if(score<80 && score>=70){
System.out.println("학점 = "+'C');
}else if(score<70 && score>=60){
System.out.println("학점 = "+'D');
}else {
System.out.println("학점 = "+'F');
}

System.out.println("획득점수 score = "+score);




}

}


--------------------------------------------------------------------------------------------------------------------------------------------------------------------



package ch0304;

/*증감 연산자(교재 p70): ++, --
- 변수의 값을 1증가 시키거나 (++)  1 감소 (--) 시키는 연산자
- 증감 연산자가 변수 뒤에 있으면 다른 연산자 먼저 처리 후 증감 연산자   처리 
++변수 : 전위
변수++ : 후위
*/

public class Ex02_increseDecrease_p71 {

public static void main(String[] args) {

int x = 10; int y = 10;
int z = 0;
System.out.println("z="+z); //0
System.out.println("x="+x); //10

x++;
//System.out.println("x="+x); //11 x++은 일단 10이다가 다음 x를 만나면 +1증가
++x;
System.out.println("x="+x); //12 ++x는 바로 1증가 시키고 x에 저장, 위에 주석문을 없애면 ++x를 만났을때 1개 더 증가.x를 만났기 떄문에

y--; //여기까지는 10인 상태
//System.out.println("y="+y);//9
--y; //--만나서 먼저빼고 y만나서 위에서 나중에 뺄거야 라고 한것 또빼서 똑같이 8
System.out.println("y="+y);//8  위에 주석처리 해도 동일하게 8


//z = x; 
z = x++; 
System.out.println("z="+z);//둘다 12 x를 만나지 않아서 증가된 값을 저장하지 않음.
System.out.println("x="+x);//이 값은 13, x를 만났기 때문에 증가 시켜서 저장

z = ++x;
System.out.println("z="+z);//14 x마지막 값이 13인데 바로 1증가시켜서 z에 저장
System.out.println("x="+x);//14 마찬가지로 13에서 바로 1 증가됐기 떄문에 14

// z = y++;
// System.out.println("z="+z);//8 y마지막값이 8인데 나중에 y를 만나면 1 증가할거야. 라는 뜻. 하지만 y를 만나기전에 8인채로 z에 저장
// System.out.println("y="+y);//9 이제 y를 만나서 1증가

z = ++x + y++; //앞과 뒤를 더해라 
//순서는 ++x먼저 14+1 = 15
//y++ 마지막 값이 8 인데 나중에 y만나면 증가할게. 아직은 8
//++x결과 + y++결과 15+8=23
//z변수에 할당  23
System.out.println("z="+z);//23 y마지막값이 8인데 나중에 y를 만나면 1 증가할거야. 라는 뜻. 하지만 y를 만나기전에 8인채로 z에 저장
System.out.println("y="+y);//9 이제 y를 만나서 1증가
System.out.println("x="+x);//15 

}

}





--------------------------------------------------------------------------------------------------------------------------------------------------------------------
교재 148p 소스 매우 중요!!!!! 이퀄이랑 ==비교



package ch05;

/*클래스는 객체를 생성하고, 
 * 생성한 객체를 통해
 * 해당 클래스의 필드(변수)와 메서드에 접근한다.
 * 
 * new  클래스명(); //객체생성
 * 타입 참조변수명; //객체를 담기위한 참조변수 선언 
 * 타입 참조변수명 = new 클래스명(); //객체생성 및 생성한 객체를 참조변수에 할당(힙영역에저장) new를 안 붙이면 스택영역에 저장. -->일반 변수선언과 동일.
 * 하지만 스택영역을 통해 힙영역으로 갈 수 있다>???
 * 
 * String타입 (p.145~148)★★★★★
 * - 문자열 리터럴 동일하다면 String 객체 공유
 * String클래스 (p.496~)★★★★★
 * 
 * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
 * ==주소지비교. 동일주소(를 가리키면)이면 true
 * 기준문자열.equals(비교문자열) 값(value)비교. 동일값이면 true
 * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
 */

public class StringEx01 {

//메인메소드이며 다른말로 진입 메소드 라고 표현을 한다.
public static void main(String[] args) { //괄호안에 String[] args 가 안들어가면 컴파일 에러는 없지만 실행 시 아무것도 안나온다.
int a = 10;
int b = 10;
System.out.println("a="+a); // 결과값 10
System.out.println("b="+b); // 결과값 10
System.out.println("a==b의 결과:"+(a==b));// true
System.out.println("---------------------------------------------------------------------");

//System.out.println("~~~"); 해당기능은 무조건 메서드 선언해야 사용가능
String str1 = "홍길동";
String str2 = "홍길동";
System.out.println("str1="+str1); // 결과값 홍길동
System.out.println("str2="+str2); // 결과값 홍길동
System.out.println("str1==str2의 결과값:"+(str1==str2)); //true
//동일 주소를 가리킨다. 또는 참조한다. 따로따로 선언했지만 같은 주소지를 가리키는 것.
System.out.println("---------------------------------------------------------------------");

//객체생성 및 생성한 객체 를 참조변수에 할당
String str3 = new String("홍길동");
String str4 = new String("홍길동");
System.out.println("str3="+str3); // 결과값 홍길동
System.out.println("str4="+str4); // 결과값 홍길동
System.out.println("str3==str4의 결과값:"+(str3==str4)); //false
//==은 참조가 같다는 뜻을 내포하고 있기 때문에 참조변수로 선언된 것은 단순 ==은 다르게 나온다.(모양은 같아도 주소지가 다르다라는 뜻)
//같은 주소지에 거주하는지를 묻는 뜻
//주소가 다르다.!
//같은 내용물을 선언했지만 주소지가 다 다른곳을 가리키는것. 독립적인 것.

/*==연산자는 주소지를 비교하여
 * 주소지가 동일하면 true를 리턴하고 주소지가 일치하지 않으면 false를 리턴한다.
 * *****이러한 주소지 개념은 개발자가 필수적으로 알아야하는 개념이다.****** 
 * 이것은 스택영역안에 str3에는 힙영역에 있는 New String("홍길동") 이라는 값이 있는 주소값을 가지고 있다.
 * 마찬가지로 스택영역안에 str4에는 힙영역에 있는 New String("홍길동") 이라는 값이 있는 주소값을 가지고 있다.★★★★★★★★
 * 참조변수 또는 레퍼런스베리어블이라고 한다.
 * str3.이라하면 str3이가지고 있는 주소지로 가서 new String("홍길동")이라는 클래스가 가지고 있는 필드와 메소드를 사용!!한다는 뜻??
 */



//참조변수명.메소드명() : 메소드 호출 방식 --> 참조변수명은 str3
/* str3.equals(str4)
 * 참조변수 str3의 값이 참조변수 str4에 저장된 값과 일치하니? 라는 뜻
 * 일치하면 true를 리턴받고, 일치하지 않으면 false를 리턴받는다.
 */
System.out.println("str3==str4의 결과값:"+(str3.equals(str4)) ); //true
//단순히 겉 모양과 내용물만 비교할때는 이퀄스 를 써줘야 한다.
//특히 그것이 참조변수로 선언된 값 원시데이터가 아닌 값일때는 특히 이퀄을 더 써줘야 한다.


}

}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

다중포문 구구단, 배열 복습 및 객체 상속 예습
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

stack 영역

배열(변수)선언
int[] scores[100번지];
     or
int scores[];



배열변수명[인덱스번호]=값;
scores[0] = 100;
scores[1] = 90;


heap 영역

100번지 [100, 90, 80, 70, 99]


배열생성
scores = new 데이터타입[길이]; 
{100, 90, 80, 70, 99} -->초기값을 주면서 배열 생성

scores.length;


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

package ch05;

/*배열(Array)이란?(교재 p149)
- 같은 타입의 데이터를 연속된 공간에 저장하는 자료구조
- 각 데이터 저장 위치는 인덱스 부여해 접근

*배열선언-primitive 타입
타입[] 변수명;
타입 변수명[];

*배열생성
1.변수명 = new 타입[길이]; new라는 연산자를 이용해서 배열선언 --> 타입에 따른 자동초기화 진행
2.변수명 = {값1, 값2,...값n};
3.변수명 = new 타입[]{값1, 값2,...값n}; 위에 두개 섞은 것. 주의. 1,2 섞어서 선언하는 방법은 []에 길이를 명시하지 않는다. 하지만 보통은 첫번째, 두번째 방식을 가장 많이 사용.

*타입에 따른 자동초기화(p156)
-char : '\u0000'  -> 공백으로 자동초기화가 된다는 뜻.
-boolean : false
-정수 : byte, short, int -> 0
long -> 0L 리터럴 형변환(기본형이 int이기 때문에)
-실수 : float -> 0.0F(기본형이 double이라서)
double -> 0.0
-클래스[] : null

*배열에 접근 : Index를 이용
Index는 0부터 1씩 증가하는 형태
변수명[0] -> Index가 0인 요소에 접근 -> 예시 System.out.println(변수명[0])
변수명[1] -> Index가 1인 요소에 접근 -> 변수명[1]=100;

 */

public class ArrayEx01 {
public static void main(String[] args) { //메소드에 들어가는 변수는 매개변수
//배열선언-타입[] 변수명;
//배열생성-변수명={값1, 값2, ...값n};
int[] scores = {100, 90, 80, 50, 100}; // 하나만 실수가 들어갈 수 없다. 같은 타입의 데이터만 배열로 선언가능
System.out.println(scores); //-->이렇게 하면 배열 주소가 저장되어 출력된다. [I@15db9742  일반 변수에 글자가 보이는것은 그값으로 초기화된것이다. 배열은 다름.

//배열접근하여 출력 - 배열명[인덱스번호]
System.out.println("scores[0] : "+scores[0]); //100 출력. 인덱스 0에 내용 출력
System.out.println("scores[1] : "+scores[1]); //90 출력. 인덱스 1에 내용 출력
System.out.println("scores[2] : "+scores[2]); //80 출력. 인덱스 2에 내용 출력
System.out.println("scores[3] : "+scores[3]); //50 출력. 인덱스 3에 내용 출력
System.out.println("scores[4] : "+scores[4]); //100 출력. 인덱스 4에 내용 출력

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

for(int i=0; i<=4; i++) {
System.out.println("scores["+i+"] : "+scores[i]);  //변수는 문자열에 포함되면 문자열로 인식되어 그냥 i로 출력
}

scores[0]=99; //값을 바꿀수도 있다. index[0]인 요소에 값을 변경

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

for(int i=0; i<scores.length; i++) {
System.out.println("scores["+i+"] : "+scores[i]);  //변수는 문자열에 포함되면 문자열로 인식되어 그냥 i로 출력
}


}

}


/////////////////////////////
배열 단점. 동일한 데이터만 선언가능.
컬렉션 프레임워크에서는 배열과 다르게 동일하지 않은 데이터를 동시에 집합하여 선언할수 있다.