컴퓨터과학/자바

POWER JAVA 2장. 자바프로그래밍 기초

Yeni_aa 2022. 10. 22. 18:25

 

목차

    1. 자바 프로그래밍 구성 요소

    2. 변수와 자료형

    3. 콘솔에서 입력받기

    4. 수식과 연산자

     


    1. 자바 프로그래밍 구성요소

    package book2;
    public class Add { //클래스 정의
    
    	public static void main(String[] args) { //메소드 정의
    		int x,y,sum;  //변수 선언
    		x = 100; //대입 연산
    		y = 200;
    		
    		sum = x+y;
    		System.out.println("sum"); //출력문 
    	}
    }

    클래스는 자바와 같은 객체 지향 언어의 기본적인 빌딩 블록

    자바에서 소스파일은 항상 public이 붙은 클래스의 이름과 동일해야 한다. 그래야 실행이 가능함.

     

     

    메소드: 메소드는 특정한 작업을 수행하는 코드의 묶음임.

     

    메소드 호출 예시)

    package book2;
    
    public class Add2 {
    
    	public static void main(String[] args) {
    		int z;
    		z = addition(100,200); // 메소드 호출하는 방법 
    		System.out.println(z);
    	}
    	
    	public static int addition(int x, int y) {
    		int sum = x + y;
    		return sum;
    	}
    }

     

     

    문장: statement는 사용자가 컴퓨터에게 작업을 지시하는 단위

    프로그램을 이루는 가장 기초적인 단위이다. 

    EX) sum = x+y;

     

    주석: comment 소스코드가 하는일 을 설명함

     

    /*  */ 또는 //

     

    2. 변수와 자료형

     

    변수: variable은 데이터를 담아두는 상자로 생각하면 됨  EX) int x;

     

    식별자 만들기

    - 알파벳문자, 숫자, 밑줄문자로 이루어짐. 한글 이름도 가능

    - 첫번째 문자는 반드시 알파벳 또는 밑줄문자여야 함. 숫자로 시작 불가능!!!!!!!

    - % & # 사용 불가$ _ 는 사용 가능하다. 

    - 대문자와 소문자를 구별함 

    - 자바언어키워드는 사용할 수 없음

     

    //사용가능한 식별자
    int sum;
    long employee_id
    class Sprite10 { }
    void get_$() { }
    //사용 불가능한 식별자
    int lstPrizeMoney;
    double super;
    int #ofcomputer
    class %_of_money

    관례

    클래스명: 단어의 첫글자는 대문자로 한다.

    변수명: 첫 단어의 첫글자는 소문자로 시작하고, 두번째 단어부터 대문자로 한다. payRate, accNumber 처럼

    상수: 상수는 모든 글자를 대문자로 한다. MAX_NUMBER

     

    자료형: data type은 변수에 저장되는 데이터의 타입을 의미한다.

    - 정수형: byte, short, int, long

    - 실수형, double, long

    - 논리형: boolean

    - 문자형: char 

     

    참조형

    - 클래스, 인터페이스, 배열 

     

    문자형인 char는 하나의 문자를 저장할 수 있음. 자바에서는 모든 문자를 2바이트 유니코드로 나타낸다!

     

    리터럴: x = 100; 에서 100과 같이 소스코드에 직접 쓰여 있는 값을 의미.

    리터럴에는 정수형, 부동소수점형, 문자형 등이 있음.

     

    논리형 리터럴: boolean type은 참과 거짓을 나타내는데 사용

    boolean flag = false;
    
    boolean x = 1<2; // 결과값 true

    상수: constant란 프로그램이 실행하는 동안 값이 변하지 않는 수, 또는 변경이 불가능 한 수를 의미한다.

    EX) final double PI = 3.141592;

     

    변수타입 추론: JAVA10부터는 var키워드를 사용할 수 있음. 지역 변수 타입을 자동으로 추론해주는 기능을 함.

    var age =22;
    var name = "Kim";
    
    MAP<String, String> map = new HashMap<String, String>(); //상속된 객체 예시
    var map = new HashMap<String, String>(); //여기서 map은 자동으로 MAP<String, String>으로 추론됨

     

     

    예제1. 1광년 거리 계산

    //// 예제 1광년 거리 계산하기
    package book2;
    public class Light {
    
    	public static void main(String[] args) {
    		final double LIGHT_SPEED = 3e5;
    		double distance;
    		
    		distance = LIGHT_SPEED*365*24*60*60;
    		System.out.println(distance);
    	}
    }
    //원의 면적 계산하기
    package book2;
    public class AreaTest {
    	public static void main(String[] args) {
    		final double PI = 3.141592;
    		double radius, area;
    		
    		radius = 5.0;
    		area = PI * radius * radius;
    		System.out.println(area);
    	}
    }

    문자열: String은 문자들의 모임

     

    형변환: 컴퓨터에서는 산술적인 연산을 하기 전에 피연산자 타입을 통일해야 한다.

     

    강제 형변환

    int x = 3;
    double y = (double) x;

    예제) 형변환 실습하기

    package book2;
    public class TypeConversion {
    
    	public static void main(String[] args) {
    		int i;
    		double f;
    		
    		f = 1/5; //0
    		System.out.println(f); // 0.0
    		
    		f = (double)1/5; //0.2
    		System.out.println(f); // 0.2
    		
    		i = (int)1.7 + (int)1.8; //1+1
    		System.out.println(i); //2
    	}
    }

     

     

     

     

     

    3. 콘솔에서 입력받기

    import java.util.Scanner;
    Scanner sc = new Scanner(System.in);

    예시) 사용자로부터 두수 입력받아서 더하기

    package book2;
    import java.util.Scanner;
    public class Add2 {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int x,y,sum;
    		
    		System.out.print("첫번째 숫자 입력: ");
    		x = sc.nextInt();
    		
    		System.out.print("두번째 숫자 입력: ");
    		y = sc.nextInt();
    		
    		sum = addition(x,y);
    		System.out.println(sum);
    	}
    	public static int addition(int x, int y) {
    		int sum = x + y;
    		return sum;
    	}
    }

     

     

     

     

     

     


     

    4. 연산자

     

    수식과 연산자

    수식은 피연산자와 연산자 사이에 이루어진다.

    연산자는 특정한 연산을 나타내는 기호를 의미함 operator

    피연산자는 연산의 대상임 operand

     

     

     

    산술연산

    예제) 나머지 연산자

     

    //예제) 나머지 연산자 
    package book2;
    
    import java.util.Scanner;
    
    public class CalTime {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		System.out.println("초를 입력하세요: ");
    		int time = sc.nextInt();
    		int sec = time%60;
    		int min = time/60;
    		
    		System.out.println(time+"초는"+min+"분"+sec+"초 입니다.");
    	}
    
    }

     

    예제) 복합대입연산자 

    //예제) 복합대입 연산자 
    
    package book2;
    public class IncOperator {
    	public static void main(String[] args) {
    		int x =1, y=1;
    		int a = x++; // x의 값이 사용되기 전에 증가가 된다. a=1 
    		int b = ++y; //y의 값이 사용된 후 증가가된다. b=2
    		System.out.println("a="+a+" b="+b);
    		
    		int c = 100, d=200;
    		c+=10;
    		d/=10;
    		System.out.println("c="+c+" d="+d);
    	}
    }

     

    관계연산자: 두 개의 피연산자를 비교하는 데 사용한다.

     

     

    논리연산자: 여러 개의 조건을 조합하여 참인지 거짓인지 판별할 때 사용함.

     

     

    예제) 관계/논리 연산자 실습하기

    //예제 관계 논리 연산자 실습하기
    package book2;
    
    public class CompOperator {
    
    	public static void main(String[] args) {
    		
    		System.out.println((3==4)+" "); //형변환 시켜주는 거 string처럼 쓰이게
    		System.out.println((3!=4)+" "); //true
    		System.out.println((3 > 4)+" "); //false
    		System.out.println((3 < 4)+" "); //true
    		System.out.println((3==3 && 4==7)+" "); //false
    		System.out.println((3==3 || 4==7)+" "); //true
    
    	}
    }

     

     

    비트 연산자

    비트연산은 프로그램과 하드웨어 칩 간의 통신에 사용된다. 

    예제) 비트연산 실습

    //예제) 비트 연산자 실습하기
    package book2;
    
    public class BitOperator {
    
    	public static void main(String[] args) {
    		byte status = 0b01101110;
    		
    		System.out.print("문 열림 상태=" +((status & 0b00000100)!=0)); // 비트2를 검사하기 위한 것.
    	}
    }

    비트 이동연산자

     

    조건 연산자

     

    예제) 조건연산자

    //예제) 조건연산자
    package book2;
    
    public class Pizza {
    	public static void main(String[] args) {
    		double area1 = 2*3.141592 *20 *20;
    		double area2 = 1*3.141592 *30 *30;
    		System.out.println("20cm 피자 면적= "+ area1);
    		System.out.println("20cm 피자 면적= "+ area2);
    		System.out.println((area1>area2)? "20cm 두 개":"30cm 한 개");
    		//(area1>area2)? "20cm 두 개":"30cm 한 개" 이 부분이 조건 연산자임 !! 
    	}
    }

     


     

    miniproject, exercise

    도전문제1. 30cm 한 개 주문하는 게 더 이득이다.

    도전문제2. println()은 프린트가 줄바꿈 되어서 나오고 print()는 출력되고 나서도 줄바꿈이 되지 않는다. 

     

    중간점검

    1. System.out.println(10%3) = 1 

    2. System.out.println(10>>1)

    3. int x=2; System.out.println(x--) 

    int x=2;
    System.out.println(x--);

    2 나옴 왜냐면 일단 2가 print되고 나서 -1 되기때문에

     

     

    미니프로젝트. 섭씨-화씨 온도 변환

    package exercise2;
    import java.util.Scanner;
    public class FtoC {
    	public static void main(String[] args) {
    		
    		System.out.println("=================");
    		System.out.println("1. 화씨");
    		System.out.println("2. 섭씨");
    		System.out.println("=================");
    		
    		Scanner sc = new Scanner(System.in);
    		System.out.print("번호를 입력하시오: ");
    		int num = sc.nextInt();
    		
    		if (num==1) {
    			System.out.print("화씨 온도를 입력하세요: ");
    			double f_temp = sc.nextDouble();
    			double c_temp = ((5.0/9.0)*(f_temp-(double)32)); //중요포인트 5/9와 5.0/9.0은 차이가 있다.
    			System.out.println("섭씨온도는" + c_temp);
    		}
    		else {
    			System.out.print("섭씨 온도를 입력하세요: ");
    			double c_temp = sc.nextDouble();
    			double f_temp = ((9.0/5.0)*c_temp + (double)32);
    			System.out.println("화씨온도는" + f_temp);
    		}
    	}
    }

    중요한 포인트는 5/9로 했을 때랑 5.0/9.0으로 했을 때 값이 완전 달라진다는 점!! 

     

    Exercise

    1. 자바언어에서 지원되는 기초 자료형에는 어떤것들이 있는가?

    byte, short, int, long, float, double, char, boolean

     

    2. 문자열은 어떤 클래스를 이용하여 처리할 수 있는가?

    String 클래스

     

    3. 클래스를 정의하는 키워드는?

     

    6. 다음 설명에 부합하는 변수를 선언해보자

    (a) long size;

    (b) var height = 183.2;

    (c) char ch = '가';

    (d) string city = "Seoul";

     

    7.

    int v =10;
    int k = v++%5;
    //System.out.println("v=" +v+"k="+ k);

    k = 10%5 = 0

    v = 11 

     

    11번.

    (height>165 && height<180)

    (height<=165)

    (height<=165 || age<10)

     

    13번.

    int i=10;
    int j=20;
    String s1 ="9";
    		
    System.out.println(i+j+s1);

    --> 309

     

    14번.

    int i = (int)Math.random(); //0~0.99999까지의 숫자 반환
    		System.out.println(i); //0 형변환되서

    --> 0

     

    15번. boolean변수값을 반전시키는 연산자는? ! NOT

    boolean a = false;
    System.out.println(!a);

     17번. 출력결과를 예상하기

    	String s1 ="abc";
    	String s2 = "def";
    	String s3 = s2; //"def"
    	s2 = "ghi";
    	System.out.println(s1+ s2+ s3); //abcghidef

     


     

    programming

    1.

    package programming;
    
    import java.util.Scanner;
    
    public class Orange {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		System.out.print("오렌지 개수를 입력하시오: ");
    		int x = sc.nextInt();
    		
    		int box = x/10;
    		int result = x%10;
    		
    		System.out.println(box+"박스가 필요하고 "+result+"개가 남습니다." );
    	}
    }

    2.

    package programming;
    
    import java.util.Scanner;
    
    public class MileKm {
    
    	public static void main(String[] args) {
    		final double Mile_1 = 1.609;
    		Scanner sc = new Scanner(System.in);
    		System.out.print("마일을 입력하세요: ");
    		double x = sc.nextFloat();
    		double km = Mile_1*x;
    		System.out.println(x+"마일은 "+ km+"킬로미터입니다.");
    	}
    }

     

    3.

    package programming;
    
    import java.util.Scanner;
    
    public class Calcul {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		System.out.print("x: ");
    		int x = sc.nextInt();
    		System.out.print("y: ");
    		int y = sc.nextInt();
    		
    		System.out.println("두수의 합: "+ (x+y));
    		System.out.println("두수의 차: "+ (x-y));
    		System.out.println("두수의 곱: "+ (x*y));
    		System.out.println("두수의 평균: "+ (x+y)/2);
    		System.out.println("큰 수 : " +((x>y)?x:y));
    		
    	}
    }

     

    4.

     

    5.

     

    6.

    package programming;
    
    import java.util.Scanner;
    
    public class Allfile {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		System.out.println("드라이브 이름: ");
    		String name = sc.next();
    		System.out.println("디렉터리 이름: ");
    		String direc = sc.next();
    		System.out.println("파일 이름: ");
    		String file = sc.next();
    		System.out.println("확장자: ");
    		String sr = sc.next();
    		
    		System.out.println("완전한 이름은"+ name + ":" + direc + file+ "."+sr);
    	}
    }

     

    7.

     

    8.

     

    9.

     

    10.