symbolic constant = 상수
상수는 대문자로 작성 (암묵적 약속)
상수 선언 후 값을 변경하려 하면 에러 발생
C언어 에서는 cont라는 명령어로 상수 지정
참 과 거짓
class T1{
public static void main(String[]args){
boolean result;
result = 5 > 3;
System.out.println(result);
}
}
result에는 true의 값이 들어가있다
true 라고 출력
class T1{
public static void main(String[]args){
boolean result;
result = 5 == 3;
System.out.println(result);
}
}
좌변과 우변이 같으면 true 아니면 false
class T1{
public static void main(String[]args){
boolean result;
result = 5 != 3;
System.out.println(result);
}
}
좌변과 우변이 같으면 false, 다르면 true
class T1{
public static void main(String[]args){
int num = 10;
++num;
System.out.println(num);
}
} //출력값 11
전치는 바로 증가 / 후치는 증가하지만 변수에 증가하기 전의 값을 대입한다.
class T1{
public static void main(String[]args){//다른 연산자와 사용되었을때
int num1 = 10, num2 = 10;
int result1 = 0, result2 = 0;
System.out.println(num1++); //10
System.out.println(num1); //11
}
}
class T1{
public static void main(String[]args){//다른 연산자와 사용되었을때
int num1 = 10, num2 = 10;
int result1 = 0, result2 = 0;
result1 = ++num1;
result2 = num2++;
System.out.println(num1 + "" + num2)
//11,10
System.out.println(result1 + "" + result2);
//11
}
}
class T1{
public static void main(String[]args){//다른 연산자와 사용되었을때
int num1 = 10, num2 = 10;
int result1 = 0, result2 = 0;
num1++;
++num2;
System.out.println(num1 + "" + num2); //11,11
}
}
result = num1; 라는 문장이 있으면 result는 10이지만 num1의 값은 11 조건이 참이든 거짓이든 무조건 한번은 실행
class T1{
public static void main(String[]args){
int i = 10;
do {
System.out.println(i);
i++;
}while(i<3);
}
}
1부터 100까지의 합
1부터 100까지의 4의 배수의 갯수
7의 배수의 합이 최초로 1000을 넘는 수와 그 수가 몇번째 항인지.
5!
class T1{
public static void main(String[]args){
int i = 0,sum = 0;
do {
sum += i;
System.out.println("i = " + i + " / sum = " + sum);
i++;
}while(i <= 100);
}
}
class T2{
public static void main(String[]args){
int i = 0,sum = 0;
do {
sum += i;
System.out.println("i = " + i + " / sum = " + sum);
i += 2;
}while(i <= 100);
}
}
class T3{
public static void main(String[]args){
int i = 4,sum = 0, cnt = 0;
do {
sum += i;
cnt += 1;
System.out.println("i = " + i + " / sum = " + sum + " / cnt = " + cnt);
i += 4;
}while(sum <= 100);
}
}
class T4{
public static void main(String[]args){
int i = 7,sum = 1,cnt = 0;
do {
sum += i;
cnt += 1;
System.out.println("sum = " + sum + " / cnt = " + cnt);
i += 7;
}while(sum <= 1000);
}
}
class T5{
public static void main(String[]args){
int i = 1, fac = 1;
do {
fac *= i;
System.out.println("i = " + i + " / fac = " + fac);
i++;
}while(i <= 5);
}
}
class Test{
public static void main(String[]args){
{
if( 5 < 1) System.out.println("Hello"); //거짓으로 실행 x
if( 5 > 1) System.out.println("Good") //참으로 수행
}
}
else는 단독으로 사용 x > if 와 함께 사용
class Test{
public static void main(String[]args){
{
if( 5 < 1){
System.out.println("Hello");
}else{
System.out.println("Good")
}
}
}
else if 또한 단독으로 사용 x, if 와 함께 사용
if(5 > 1) System.out.println("Hello");
else if(5>2) System.out.println("Nice");
else if(5>3) System.out.println("Good");
else System.out.println("Bye"0;)
if 가 만족하면 else if문장은 실행되지 않는다.
if가 만족하지 않고, else if 도 만족하지 않으면 else가 출력된다.
사용자로부터 입력을 받는 명령어
import java.util.Scanner; 선언 필수
Scanner 변수명1 = new Scanner(System.in);
변수명 = 변수명1.nextInt(); 로 답변 입력 받는다.사용 후 sc.close(); 로 닫아주는게 좋다.
nextLine() 메서드와 나머지 메서드의 차이점 2가지
nextLine() 메서드는 Enter 단위로 읽고, =Spacebar와 같은 공백문자들을 포함해서 한 줄을 읽는다.
나머지 메서드들은 토큰(Token) 단위로 읽는다.
입력값을 읽어들일 때,
nextLine() 메서드는 '\n'를 포함해서 읽어들이고,=(입력 버퍼에 저장되어있는) 공백문자를 포함하는 한줄을 읽는다.
나머지 메서드들은 '\n'뿐만 아니라 다른 공백문자도, 제외해서 읽어들인다.
반환할 때,
nextLine() 메서드는 '\n'을 버려서 return 하고,
나머지 메서드들은 애초에 공백문자를 제외해서 읽어들였으므로 당연히 반환값도 공백문자가 제외된 상태로 return 된다.
nextLine()을 제외한 나머지 Scanner 클래스의 메서드들은 토큰(Token) 단위로 읽는다.
나머지 메서드 들은 입력값을 읽을 때 공백문자를 제외해서 읽어들인다.
그에 따라 반환할 때도 당연히 공백문자를 제외한 값을 return 한다.
Q. 임의의 두 수를 입력받아 큰 수를 출력하시오
+ 두 수가 서로 같으면 같다고 출력
import java.util.Scanner;
class Scanner1{
public static void main(String[]args){
int num1 = 0, num2 = 0;
Scanner sc = new Scanner(System.in);
System.out.println("첫 번째 숫자를 입력하세요.");
num1 = sc.nextInt();
System.out.println("두 번째 숫자를 입력하세요.");
num2 = sc.nextInt();
if(num1 < num2){
System.out.println("두 번째 숫자가 더 큽니다. " + num2);
} else if (num1 > num2) {
System.out.println("첫 번째 숫자가 더 큽니다. " +num1);
} else {
System.out.println("두 수가 같습니다.");
}
sc.close();
}
}

if(num1 < num2){
System.out.println("두 번째 숫자가 더 큽니다. " + num2);
} if (num1 > num2) {
System.out.println("첫 번째 숫자가 더 큽니다. " +num1);
} if (num1 == num2) {
System.out.println("두 수가 같습니다.");
}
class Ex1{
public static void main(String[]args){
int cnt = 0;
for(int i = 0; int <= 100; i++){
if(i%4 == 0)
cnt++;
}
}
}
if문이 100번 반복된다.
class Ex2{
public static void main(String[]args){
int cnt = 0;
for(int i = 4; int <= 100; i+= 4){
cnt++;
}
}
}
for문 이용해 25번만 반복된다.
예제 2번이 더 좋은 로직이 된다.
class Ex1{
public static void main(String[]args){
int num1 = 10, num2 = 5, = 0;
System.out.println(num1 + " " + num2);
num3 = num1;
num1 = num2;
num2 = num3;
System.out.println(num1 + " " + num2);
}
}
int num3 = num1; / int num1 = num2 이런식으로 입력해서 출력했더니 String으로 인식하는지 오류난다. String에서 int로 자동 형변환이 되나
Q1. 임의의 숫자 5개를 입력받아 오름차순 되게 하시오(ASC) - 배열이 아닌 if문 사용
import java.util.Scanner;
class Ex1{
public static void main(String[]args){
int num1 = 0, num2= 0, num3 = 0, num4 = 0, num5 = 0, temp = 0;
Scanner sc = new Scanner(System.in);
System.out.println("첫 번째 숫자 입력");
num1 = sc.nextInt();
System.out.println("두 번째 숫자 입력");
num2 = sc.nextInt();
System.out.println("세 번째 숫자 입력");
num3 = sc.nextInt();
System.out.println("네 번째 숫자 입력");
num4 = sc.nextInt();
System.out.println("다섯 번째 숫자 입력");
num5 = sc.nextInt();
if (num1 < num2){
}else{
temp = num1;
num1 = num2;
num2 = temp;
}if (num1 < num3){
}else{
temp = num1;
num1 = num3;
num3 = temp;
}if (num1 < num4){
}else{
temp = num1;
num1 = num4;
num4 = temp;
}if (num1 < num5){
}else{
temp = num1;
num1 = num5;
num5 = temp;
//가장 작은 수 결정
}if (num2 < num3){
}else{
temp = num2;
num2 = num3;
num3 = temp;
}if (num2 < num4){
}else{
temp = num2;
num2 = num4;
num4 = temp;
}if (num2 < num5){
}else{
temp = num2;
num2 = num5;
num5 = temp;
//두 번째로 작은 수 결정
}if (num3 < num4){
}else{
temp = num3;
num3 = num4;
num4 = temp;
}if (num3 < num5){
}else{
temp = num3;
num3 = num5;
num5 = temp;
//세 번째로 작은 수 결정
}if (num4 < num5){
}else{
temp = num4;
num4 = num5;
num5 = temp;
//네 번째로 작은 수 결정
}
System.out.println(num1 + " " + num2 + " " + num3 + " " + num4 + " " + num5 );
}
}

class Test{
public static void main(String[]args){
int i = 0;
for(i = 0; i < 10; i++){
if(i > 5)
continue;
System.out.println("Hello");
}
System.out.println("i = " + i);
}
}
continue 진행되는 순서
for문 i = 0
i < 10
중괄호 수행 > Hello출력
증감연산자 i + 1 수행
for문 반복하다가 i 가 5보다 커지면 continue로 인해 조건문의 제일 위 증감연산자로 이동한다.
continue에 의해 for문 증감 연산자로 이동되어 i가 1씩 계속 증가되다가 10이 출력된다.
break 진행 순서
for(i=1;true;i++)으로 설정하고, 1+2+3+ ... 순차적으로 더했을 때 최초로 5000을 넘는 수를 break를 통해 구현.
1부터 20까지 출력을 하는데 2의 배수와 3의 배수는 출력하지 않기 continue 이용
5의 배수이자 7의 배수인 가장 작은 수 break
100 이하의 자연수 중에 5의 배수이자 7의 배수인 정수를 전부출력하고, 그 수를 세어보는 프로그램 continue;
class T1{
public static void main(String[]args){
int i = 0, sum = 0;
for(i = 1; true; i++){
sum += i;
if ( sum >= 5000){
System.out.println("i = " + i + " / sum = " + sum );
break;
}
}
}
}
break위치 주의!
println위에 있으면 5000이 넘었지만 println보다 위에서 끝내기때문에 5000전에 값이 출력된다.

class T2{
public static void main(String[]args){
int i = 0, sum = 0;
for(i = 1; i <= 20; i++){
if (i %2 != 0 && i % 3 != 0){
System.out.println("i의 결과: " + i );
continue;
}
}
}
}
if(i%2 == 0) conitnue;
if(i%3 == 0) conitnue;
이렇게 if 문을 작성하고 continue를 작성하면 2의 배수는 출력하지 않는다.
2와 3의 배수는 continue 때문에 출력문장까지 가지 않고 다시 조건문의 처음으로 되돌아가기 때문이다
내가 한 식도 맞지만 if(i%2 == 0 || i%3 == 0) conitnue; 이렇게도 문장 작성 가능
||( 논리 or 연산자: 하나라도 참이면 참, 둘다 거짓일 때 거짓) - 병렬 구조일때는 or사용

class T3{
public static void main(String[]args){
int i = 0;
for(i = 1; i <= 100; i++){
if (i % 5 == 0 && i % 7 == 0 ){
System.out.println("5의 배수이자 7의 배수인 가장 작은 수" + i);
break;
}
}
}
}

내가 작성한 문장 - 잘못된
class T4{
public static void main(String[]args){
int i = 0, cnt = 0;
for(i = 1; i <= 100; i++){
cnt ++;
if ( i % 5 == 0 && i % 7 == 0){
System.out.println("i = " + i + " cnt = " + cnt);
continue;
}
}
}
}
문제가 5와 7의 최소공배수를 구하는 문제다.
나의 식을 확인해보면 5와 7의 최소공배수이긴 하나 cnt++이 if 전에 수행되므로 count의 기능 수행 x
continue가 제일 마지막에 위치해 논리적으로 쓸모가 없음 (문법적으로는 문제 x)
정답식
class T4{
public static void main(String[]args){
int i = 0, cnt = 0;
for(i = 1; i <= 100; i++){
if ( i % 5 != 0 || i % 7 != 0) continue;
cnt ++;
System.out.println("i = " + i + " cnt = " + cnt);
}
}
}
문제는 5와 7의 공배수
i가 5와 7의 나머지가 0이 아닐때 continu를 만난다.
조건문의 처음으로 가서 실행되다가 i가 5와 7의 나머지가 0일때
import java.util.Random;
class Test{
public static void main(String[]args){
Random rand = new Random(); //rand = 변수, Random = 생성자
int num = 0;
num = rand.nextInt(100); // 0~99까지 난수 발생시킴
System.out.println(num);
}
}
nextInt(33) 이면 0 ~ 32까지 난수 발생 > 괄호 안 -1
Q. 1부터 100사이의 임의의 난수를 발생시킨다.
그리고 그 숫자를 맞추는 게임을 만드시오.
예:
게임을 시작합니다.
숫자를 입력하세요.
50
당신이 입력한 숫자 보다 큽니다.
80
당신이 입력한 숫자 보다 작습니다.
67
정답입니다. 당신은 3번만에 정답을 입력하셨습니다.
프로그램을 종료합니다.
내가 작성한 틀린 문장
import java.util.Random;
import java.util.Scanner;
class Test{
public static void main(String[]args){
int num = 0, answer = 0, cnt = 0;
Random rand = new Random();
Scanner sc = new Scanner(System.in);
num = rand.nextInt(100) + 1; // 0~99까지여서 +1 해줘야한다.
System.out.println("게임을 시작합니다. 숫자를 입력하세요.");
answer = sc.nextInt();
cnt++;
if(num < answer){
System.out.println("당신이 입력한 숫자 보다 작습니다.");
answer = sc.nextInt();
cnt++;
}
if ( num > answer){
System.out.println("당신이 입력한 숫자 보다 큽니다.");
answer = sc.nextInt();
cnt++;
} if (answer != num)
System.out.println("정답입니다. 당신은 " + cnt + "번만에 정답을 입력하셨습니다.");
System.out.println("프로그램을 종료합니다.");
}
}
값을 입력해도 정답을 맞춘게 아니라 3번째에 정답이라고 출력되게끔 작성된것이다.
횟수에 제한이 있다.
continue를 사용해서 끊어줘야하는데 문법적으로 맞지 않음 저기서 continue를 넣는게
import java.util.Random;
import java.util.Scanner;
//import java.util.*; 모든 기능 import해주는 그러나 가독성 측면에는 위와같은게 좋다.
class Test{
public static void main(String[]args){
int rnum = 0, inum = 0, cnt = 0;
Random rand = new Random();
Scanner sc = new Scanner(System.in);
num = rand.nextInt(100) + 1; // 0~99까지여서 +1 해줘야한다.
System.out.println("게임을 시작합니다. 숫자를 입력하세요.");
while(true) { //true는 무한루프이므로 위험 부담 while(rnum != inum) 이게 좋음
cnt++;
inum = sc.nextInt();
if(rnum > inum)
System.out.println("당신이 입력한 숫자보다 큽니다.");
else if{
(rnum < inum)
System.out.println("당신이 입력한 숫자보다 작습니다.");
}else {
System.out.println("정답입니다. 당신은 " + cnt + "번 만에 정답을 맞추셨습니다.")'
System.out.println("프로그램을 종료합니다.");
//break; while을 사용하면 쓸모 x
}
}
}
}