import java.util.Scanner;
class SwitchT1{
public static void main(String[]args){
int lunch = 0;
Scanner sc = new Scanner(System.in);
System.out.println("lunch");
System.out.println("1. 햄버거");
System.out.println("2. 피자");
System.out.println("3. 잔치국수");
System.out.println("4. 국밥");
System.out.println("음식을 고르세요: ");
lunch = sc.nextInt();
switch(lunch){
case 1:
System.out.println("당신은 햄버거를 선택하셨습니다.");
break;
case 2:
System.out.println("당신은 피자를 선택하셨습니다.");
break;
case 3:
System.out.println("당신은 잔치국수를 선택하셨습니다.");
break;
case 4:
System.out.println("당신은 국밥을 선택하셨습니다.");
break;
default:
System.out.println("당신은 잘못 선택하셨습니다.");
//break; - default의 위치는 마지막이기때문에 굳이 break쓸 필
}
}
}
break문은 문장 사이사이마다 꼭 있어야 하는것은 아니다.
case 1 과 2를 함께 출력하고 싶다면 break;를 넣지않으면 된다.
break;문이 없으면 지정된 case 밑으로 쭉 이어져 출력된다.

import java.util.Scanner;
class SwitchT1{
public static void main(String[]args){
int lunch = 0;
Scanner sc = new Scanner(System.in);
System.out.println("lunch");
System.out.println("1. 햄버거");
System.out.println("2. 피자");
System.out.println("3. 잔치국수");
System.out.println("4. 국밥");
System.out.println("음식을 고르세요: ");
lunch = sc.nextInt();
// 하나만 선택하라 > else if, 모두 선택하라 > if
if(lunch == 1){
System.out.println("당신은 햄버거를 선택하셨습니다.");
}else if(lunch == 2){
System.out.println("당신은 피자를 선택하셨습니다.");
}else if(lunch == 3){
System.out.println("당신은 잔치국수를 선택하셨습니다.");
}else if(lunch == 4){
System.out.println("당신은 국밥을 선택하셨습니다.");
}else
System.out.println("당신은 잘못 선택하셨습니다.");
}
}
byte > short > int > long > float > double
실수가 정수보다 크기 때문에

short num 1 = 4;
short num 2 = 3;
short result = num1 + num2; //error
int num1 = 5;
short num2 = 3;
int result = num1 + num2; //자동형변환
result = num1 + (int)num2; //강제형변환
작은 자료형에서 큰 자료형으로 옮기는것(short > int)이 자료 손실 x > 이런경우 자동형변환이 된다.
자동보다는 강제형변환이 더 좋다 > 개발자가 인지하고 넘어가도록
정수 > 실수는 무조건 강제 형변환 시켜야한다. 실수가 정수보다 크기때문이다.
int num = (int)4.5;
int num2 = 10000000000; //> 백억*에러
float num3 = 3.14; //에러
정수형도 기본적으로 int로 저장하기 때문에
실수형 상수는 기본적으로 double로 저장


왼쪽 시프트와 유사하나 채워질때 다르다.
>> 기본원리는 같다.
빈자리는 무조건 0으로 채워진다.
두 비트 모두 1 이여야 1이다. (하나라도 다르면 0)
Q. int형 정수 15678의 오른쪽 세 번째 비트와 다섯 번째 비트가 각각 어떻게 되는지 확인하여 출력하는 프로그램.
package com.test.blog;
public class _For {
public static void main(String[] args) {
System.out.println("15678의 오른쪽 끝에서 3번째 비트는" + (15678 >> 2 & 1));
System.out.println("15678의 오른쪽 끝에서 5번째 비트는" + (15678 >> 4 & 1));
}
}
2로 시프트 시키면 마지막 비트가 1이거나 0일텐데 여기서 비트 &(and 연산자)를 이용해 1로 and연산 시키면 값이나온다
꼭 1로 비교해야한다.
and 연산자를 쓰는 이유는 비교하는 값이 그대로 내려오기 때문이다. (비트마스크 기법)
숫자 그대로 입력한 후 시프트 연산자 해도 가능한 이유는 컴퓨터는 이진법을 이용해 숫자를 받아들이기 때문이다.
class SwitchT1{
public static void main(String[]args){
int i = 0;
int num1 = 5, num2 = 3;
i = num1 > num2 ? num1 : num2;
System.out.println(i);
}
Q 1. 임의의 숫자를 입력받아 절대값 구하기. 삼항연산자를 이용
int abs = 0, num1 = 0;
Scanner sc = new Scanner(System.in);
System.out.println("숫자를 입력하세요");
num1 = sc.nextInt();
abs = num1 > 0 ? num1 : - num1;
System.out.println(num1 + "의 절대값은 " + abs)
ex1.
public class Ex1 {
public static void main(String[] args) {
int num1 = 0, num2 = 0;
if((num1 = num1 + 10) > 10 && (num2 = num2 + 10) > 10)
System.out.println("Good");
if((num1 = num1 + 10) > 10 || (num2 = num2 + 10)> 10)
System.out.println("Nice");
System.out.println("num1 = " + num1 + " num2 = " + num2);
}
}
첫번째 if 문은
두번째 if 문은
ex2.
public class Ex2 {
public static void main(String[] args) {
int i = 0, j = 0;
while(i++ < 10 || j++ < 10) {}
System.out.println("i = " + i + " j = " + j);
}
}
연산자와 함께 사용됐기 때문에 후치증가라는것 인지하기
0부터 시작해서 참이기 때문에 j는 실행되지 x
계속 i만 증가 되면서 10까지 증가. i가 11이 되었을때 거짓이 되므로 j가 실행된다.

어떠한 문제를 처리하기 위한 방법을 소스 코드로 묶어놓고 필요(호출)에 따라 동작하는 기능 정도로 생각할 수 있다.
(다른 언어에서는 함수(function)으로 불린다.)

클래스를 생성할 때마다 main이라는 메소드public static void main(String[] args) { } 를 사용하고 있다.
프로그램의 시작점 역할을 하는 JAVA의 약속된 내용이다.
main 메소드가 없는 프로그램은 별도로 동작 x
무조건 JAVA를 실행할 때 main 메소드가 실행된다.
필요에 따라 정의한 메서드를 호출
자료형 또는 void가 올 수 있다.
자료형이 리턴 타입으로 오변 return 해주는 값이 반드시 있어야 하고, 이 return해주는 값은 메소드 자료형과 동일해야 한다.
class MethodTest{ //클래스 이름은 대문자
public static void main(String[]args){
hello(); //메소드 호출
}
public static void hello(){ //메소드 이름은 소문자, 뒤 괄호는 파라미
// void 를 사용하면 반환하는 값 x , 호출만 당하
System.out.println("Hello");
}
외부로부터 입력 값을 받기 위해 메소드의 괄호 안에 선언하는 변수
class MethodTest{
public static void main(String[]args){
hello(3);
}
public static void hello(int max){
for(int i = 0; i < max; i++){
System.out.println("Hello");
}
int max > 파라미터
hello(3); 으로 호출했기 때문에 max의 지역변수(매개변수) 의 값이 3이 된다.
hello(3) 의 3은 인수로 arguments라고 한다.
class MethodTest{
public static void main(String[]args){
int max = 3;
hello(max);
//사실 이렇게 작성할 필요없이 hello(3); 이렇게 호출하면 hello메소드 max값 안에 3이 들어가 실행된다.
}
public static void hello(int max){
for(int i = 0; i < max; i++){
System.out.println("Hello");
}
main메소드와 hello 메소드는 다른 지역이기때문에 변수가 같아도 상관 x (but 헷갈리지 않게 조심)
main메소드에서 hello변수를 호출하고 싶다면 hello(변수명), 위와 같이 hello(max)로 호출해야한다.
class MethodTest{
public static void main(String[]args){
int result = 0;
result = hello(3);
//이렇게 작성안하고 syso괄호 안에 hello(3) 넣어도 결과는 같음
System.out.println(result);
}
public static int hello(int max){
for(int i = 0; i < max; i++){
System.out.println("Hello");
}
return 100;
//return을 만나면 호출한 곳으로 이동하고, return이 값을 가지고 있으면 값을 가지고 이동한다.
}
}//Hello 세번 출력 후 100출력
사용자 정의 메소드의 void는 return값을 받지않고 호출만 할때 사용하고, return값을 받을때 이에 맞는 자료형을 넣어줘야한다.
boolean을 넣어준다면 return값은 반드시 boolean 이여야한다.
class MethodTest{
public static void main(String[]args){
System.out.println(hello(max);//호출하고 반환값을 받아 출력하는 문장
}
public static double hello(int max){ //void는 반환하는 값을 적는것이기 때문에 자료형에 맞게 적어줘한다. return하는 값이 없으면 void, return은 없는데 반환받으려하는 값이 main에 있으면 오류나기때문에 반환하는 값이 없으면 호출만 해야한다.
for(int i = 0; i < max; i++){
System.out.println("Hello");
}
return 3.5;
}
}//hello 3번 출력 후 3.5 출력
class MethodTest{
public static void main(String[]args){
int result = add(5, 10);
System.out.println(result);
}
public static int add(int num1, int num2){
int result = num1 + num2;
return result;
}
}class MethodTest{
public static void main(String[]args){
int result = add(5, 10);
System.out.println(result);
}
public static double hello(int num1, int num2){ //각각 선언
int result = num1 + num2;
return num1 + num2;
}
}
class Add {
public static void main(String[] args) {
addition(10);
}
public static void addition(int add){
for( int i = 1; i < add; i++){
for( int j = 1; j < add; j++){
System.out.println(i + "+" + j + "=" + (i+j));
}
}
}
}
Q1.사칙연산을 각각 메소드로 사칙연산의 결과 값을 리턴한다.
class Q1 {
public static void main(String[] args) {
System.out.println("덧셈 1 + 2 = " + add(1,2));
System.out.println("뺄셈 5 - 1 = " + sub(5,1));
System.out.println("곱셈 1 * 2 = " + add(1,2));
System.out.println("나눗셈 1 / 2 = " +add(1,2));
}
public static int add(int num, int num1){
return num + num1;
}
public static int sub(int num, int num1){
return num - num1;
}
public static int multi(int num, int num1){
return num * num1;
}
public static int div(int num, int num1){
return num / num1;
}
}

Q2.정수값 하나를 넘겨주면 그 정수에 해당하는 구구단을 출력하는 메소드
(예 정수 3을 넘겨주면 3단을 출력). 리턴값 없음
class Q2 {
public static void main(String[] args) {
timesTable2(2,9); //start = 2, end = 9
}
public static void timesTable2(int start, int end) {
for(int i = start; i <= end; i++) {
for(int j = 1; j <= 9; j++) {
System.out.println(i + " * " + j + " = " + i * j);
}
System.out.println();
}
}
}
Q3.정수값 두개를 넘겨주면 첫 번째 매개변수 시작단부터 두번째 매개변수
끝단까지 출력하는 메소드 (ex 3과 5를 넘겨주면 3단부터 5단까지 출력)
> 리턴값 없음
class Q3{
public static void main(String[]args){
// System.out.print(dan(2,5))
dan(2,5); //2~5단까지 출력
}
public static void dan(int num1, int num2) {
int i = 0, j = 0;
for(; num1 <= num2; num1++)
{
for(i = 1; i < 10; i++)
{
System.out.println(num1 + " * " + i + " = " + (num1 * i) + "\t");
}
}
}
}
리턴값 없는데 void에 int 사용
리턴값 없는데, 메인 메소드에서 출력하려고 함.. 난 바보야...
Q4.숫자하나를 넘겨주면 1부터 그 숫자까지 더해서 그 값을 리턴하는 메소드
(예 5를 넘겨주면 1부터 5까지 순차적으로 더해서 그 값을 리턴)
class Q4{
public static void main(String[] args) {
System.out.println(plus(5));
//출력문에 사용자메소드를 넣어도 호출로 인정, 호출되었다가 출력된다.
}
public static int plus(int num) {
int i = 0, cnt = 0;
for( i = 1; i <= num; i++) {
cnt = cnt + i;
}
return cnt;
}
}
Q5. 정수값 두개를 넘겨주면 첫 번째 매개변수가 시작값부터 두 번째 매개
변수가 끝값까지 더해서 리턴
(5와 10을 넘겨주면 5부터 10까지 순차적으로 더해서 그 값을 리턴)
class Q5{
public static void main(String[] args) {
//5가 시작값, 10이 끝값
System.out.println(plus(5,10));
}
public static int plus(int num, int num2) {
int i = 0, cnt = 0;
for( i = num; i <= num2; i++) {
cnt = cnt + i;
}
return cnt;
}
}
Q6 정수값 하나를 넘겨주면 그 정수값에 대한 팩토리얼 값을 리턴
class Q6{
public static void main(String[] args) {
System.out.println(plus(5));
}
public static int plus(int num) {
int i = 0, fac = 1;
for( i = 1; i <= num; i++) {
fac *= i;
}
return fac;
}
}
Q7. 숫자하나를 넘겨주면 그 숫자가 소수이면 true를 리턴 소수가 아니면 false를 리턴하는 메소드
class Q7{
public static void main(String[] args) {
System.out.println(isPrimtNumber(5));
}
public static boolean isPrimtNumber(int num) {
if(num <= 1) return false; //굳이 else문 쓸 필요 x
for(int i = 2; i < num; i++) {//조건이 만족하면 for문 벗어나서 true 리턴
if(num % i == 0) return false;
}
return true;
}
}
스캐너를 이용해 값을 받아 그 수가 소수인지 아닌지를 확인하는..
class Q7{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("소수인지 확인할 값을 입력하세요.");
int result = sc.nextInt();
System.out.println(minority(result));
}
public static boolean minority(int result) {
int i = 0;
boolean flag = true;
if(result <= 1)
{
flag = false;
}
for(i = 2; i < result; i++)
{
if(result % i == 0); // 세미콜론때문에 출력이 안되는것이였
{
flag = false;
}
}
return flag;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//boolean num = true; // 값을 boolean에 가져오는거라 굳이 선어 안해도 됌
System.out.println("소수인지 확인할 값을 입력하세요.");
int result = sc.nextInt();
//num = minority(result); //리턴값을 받는 곳, 따로 설정안하고 출력하면서 호출 가능
System.out.println(minority(result));
}
public static boolean minority(int result) {
int i = 0;
boolean flag = true;
if(result <= 1)
{
flag = false;
}
for(i = 2; i < result; i++)
{
if(result % i == 0)
{
flag = false; //return이 아니라 return할 변수 안에 값을 넣는것.
}
}
return flag;
}
}
Q8.7번 메소드를 이용하여 1부터 100사이의 모든 소수 출력. 7번메소드는 변경하면 안된다.
class Q8{
public static void main(String[] args) {
for(int i =1; i <= 100; i++) { //1~100 사이 숫자 출력
if(isPrimtNumber(i)); //위에서 출력된 숫자가 소수인지 아닌지 확인하기 위해 호출
System.out.println(i + " ");
}
}
public static boolean isPrimtNumber(int num) {
if(num <= 1) return false;
for(int i = 2; i < num; i++) { //조건이 만족하면 for문 벗어나서 true 리턴
if(num % i == 0) return false;
}
return true;
}
}