본문 바로가기

JAVA

[WEB]DAY3_입력 메소드(2), 연산자, 조건식

입력 메소드 (Scanner) 

next() : 공백 혹은 \n를 구분점으로 삼고 각 값을 분리하여 저장한다.
nextLine() : 구분점이 없기 때문에 입력받은 값 통채로를 저장한다.

 


 

package day03;

import java.util.Scanner;

public class ScannerTest {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String name = "";
		int age = 0;
		
		System.out.print("나이 : ");
		age = Integer.parseInt(sc.next());
		System.out.print("이름 : ");
		sc.nextLine();
		name = sc.nextLine();
		System.out.println(name + "님 환영합니다.");
		System.out.println(age + "살");
		
		
//		Scanner sc = new Scanner(System.in);
//		String name = "";
		
//		System.out.print("이름 : ");
//		name = sc.next();
//		System.out.println( name + sc.next() + "님 환영합니다.");
		//공백만큼 sc.next()를 써야한다.
		
		
	}

}

 

 


 

package day03;

import java.util.Scanner;

public class ScannerTest2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String n1Msg = "첫번째 정수 : ";
		String n2Msg = "두번째 정수 : ";
	
		int num1 =0, num2 =0, result = 0;
		
		System.out.print(n1Msg);
		num1 = sc.nextInt();
		
		System.out.print(n2Msg);
		num2 = sc.nextInt();
		
		result = num1 + num2;
		
		System.out.printf("%d+%d=%d", num1, num2, result);
	}

}

 


 

JOptionPane

 

JOptionPane.showInputDialog() 창으로 입력을 받을 수 있다.

JOptionPane.showMessageDialog(null, result); 창으로 메세지를 띄울 수 있다. 


package day03;

import javax.swing.JOptionPane;

public class Dialog {

	public static void main(String[] args) {
		int num1 = Integer.parseInt(
				JOptionPane.showInputDialog("첫번째 정수를 입력하세요" ));
		int num2 = Integer.parseInt(
				JOptionPane.showInputDialog("두번째 정수를 입력하세요" ));
		//문장전체가 입력한 숫자가 된다.
		
		int result = num1 + num2;
		
		JOptionPane.showMessageDialog(null, result);
	}

}

 


package day03;

import javax.swing.JOptionPane;

public class DialogTask {

	public static void main(String[] args) {
		//이름, 나이, 성별 입력받고 출력하기
		//JOptionPane 사용하기
		String name = "";
		int age = 0;
		String gender ="";
		
		String resultMsg = "";
		
		String nameMsg = "이름을 입력하세요.";
		String ageMsg = "나이를 입력하세요.";
		String  genderMsg= "성별을 입력하세요.";
		
		
		name = JOptionPane.showInputDialog(nameMsg);
		age = Integer.parseInt(JOptionPane.showInputDialog(ageMsg));
		gender = JOptionPane.showInputDialog(genderMsg);
		
//		resultMsg = String.format("이름 :%s\n나이 : %d살\n성별: %s", name, age, gender);
		
		resultMsg = ( "이름 :" + name +" \n나이 :" + age +"\n성별" + gender);
		
		JOptionPane.showMessageDialog(null, resultMsg);
		
	}

}

 


package day03;

import javax.swing.JOptionPane;

public class DialogTask2 {

	public static void main(String[] args) {
		//정수 2개를 입력받고
		//사칙연산 결과값 모두 출력
		//덧셈, 뺄셈, 곱셈, 나눗셈(소수점 2째자리까지)
		//JOptionPane사용
		
		int num1 =0 ;
		int num2 = 0;
		String n1Msg = "첫번째 정수를 입력하세요.";
		String n2Msg = "두번째 정수를 입력하세요.";
		
		int add = 0;
		int sub =0;
		int mul = 0;
		double div =0.0;
		
		String resultMsg= "";
		
		num1 = Integer.parseInt(JOptionPane.showInputDialog(n1Msg));
		num2 =Integer.parseInt(JOptionPane.showInputDialog(n2Msg));
		
		add = num1 + num2;
		sub = num1 - num2;
		mul = num1*num2;
		div = Double.parseDouble(String.format("%.2f", (num1+0.0)/num2));
		
		resultMsg = "첫번째 정수: " +num1+", 두번째정수: "
					+num2 + "\n[덧셈]: "+add+"\n[뺄셈]: "+sub+"\n[곱셈]: "+mul +"\n [나눗셈]: "+div;
		
		JOptionPane.showMessageDialog(null, resultMsg);
		
	}

}

연산자

: 기능이 있는 특수문자

연산자의 우선순위

     1. 우선 연산자
     2. 항 연산자
     3. 술 연산자
     4. 프트 연산자
     5. 계 연산자
     6. 논 연산자
     7. 항 연산자
     8. 입 연산자

결합성(면접에서도 나오니까 알아두기)
     같은 우선순위를 가진 연산자가 여러개 있을 때
     알맞는 방향으로 결합되어 연산되는 성질

비트 연산
     논리 연산자
          & AND (논리곱)            : 두 비트 모두 1이면 1
          | OR (논리합)                : 둘 중 하나라도 1이면 1
          ^ NOR (배타논리합)       : 두 비트가 서로 다르면 1

     단항 연산자 (원리를 알고 싶으면 맨 아래 필기를 참조)
          ~ NOT(논리부정)           : 0을1로, 1을 0으로 변경
          ~a = -a -1

 


package day03;

public class BitOper {

	public static void main(String[] args) {
		System.out.println(10&11);
		System.out.println(10|11);
		System.out.println(10^11); 
		System.out.println(~10); 
 	}

}

 


부호비트

     비트는 우에서 좌로 읽고 최상단 비트(좌측)에는
     부호비트가 들어간다.
     0은 양수, 1은 음수이다.

2의 보수
     문제) 1 1110 0110
          1. 우에서 좌로 읽으면서 1을 찾는다.
          2. 그 다음 비트부터 NOT해준다.
                예) 0 0001 1010
          3. 10진수로 고친다.
                예) 26
          4. -를 붙여준다.
               정답) -26

쉬프트 연산자(비트이동)
     a<<b a를 b만큼 비트이동

     a>>b b를 a만큼 비트이동

     비트 이동시 빈 칸은 0으로 채워지고(음수는 1)
     비트가 넘어가면 자동으로 잘린다.


조건식

: 결과가 참 또는 거짓, 둘 중 하나가 나오는 식

    참 : true
    거짓 : false

 

    전구가 켜지면 참, 꺼지면 거짓
    1 : 참
    0 : 거짓

    C언어에서는 0은 거짓, 0이외의 모든 수는 참
    JAVA에서는 false 거짓, true 참

논리형

    10 > 4 == true
    10 != 10 == false

자료형 type   byte  
논리형 boolean  1 true, false 


boolean isTrue = 10 > 1;


관계 연산자 (비교연산자)
     == : 같다.
     != : 같지 않다.
     >,< : 초과, 미만
     >=,<= : 이상, 이하


논리 연산자(두 조건식을 이어주는 역할)
     &&(AND)      : A&&B - 두 조건식 모두 참일 때 참
     ||(OR)            : A||B - 둘 중 하나라도 참이면 참

단항 연산자
     ! (NOT) : !A - 참은 거짓으로 거짓이면 참으로 변경

 


package day03;

public class OperTest {

	public static void main(String[] args) {
			
		boolean isTrue = 10 == 11;
			
		System.out.println(10 == 11);
		System.out.println(10 == 11 && 10>4);
		System.out.println(10 == 11 || 10>4);
//		System.out.println( !10 == 11);
//		단항이 관계연산자보다 먼저 되기 때문에 오류
		System.out.println(!(10 ==11));
		System.out.println(!isTrue);
	}

}



삼항 연산자 (? :)
     조건식 ? 참 : 거짓  (저장공간에 넣기 위해서는 자료형이 같아야함)

     참과 거짓 영역에는 값만 들어갈 수 있다.
        예) 10>1 ? 10 : 1 ;

 


 

package day03;

import java.util.Scanner;

public class OperTest2 {

	public static void main(String[] args) {
		//정수 2개 입력
		//Scanner
		int num1 =0, num2 =0;
		int result = 0;
		
		String msg = "";
		
		Scanner sc = new Scanner(System.in);
		
		String n1Msg = "첫번째 정수: ";
		String n2Msg = "두번째 정수: ";
		
		System.out.println("-9999는 비교대상이 아닙니다.");
		System.out.print(n1Msg);
		num1 = sc.nextInt();
		System.out.print(n2Msg);
		num2 = sc.nextInt();
		
		result = num1> num2? num1 : num1 ==num2 ? -9999 : num2;
		msg = result == -9999? "두 수는 같습니다" : "큰 값 :" + result;
		System.out.println(msg);
	
	}

}

 


 

//삼항 연산자를 사용해서 정답이면 정답 출력, 오답이면 오답 출력
//Q. 다음 중 프로그래밍 언어가 아닌 것은?
//1. JAVA
//2. 파이썬
//3. C언어
//4. 망둥어

 


package day03;

import java.util.Scanner;

public class OperTask {

	public static void main(String[] args) {
		
		int choice = 0;
		int answer = 4;
		
		String resultMsg = "";

		
		String msg = "Q. 다음 중 프로그래밍 언어가 아닌 것은?\n" + "1. JAVA\n" + "2. 파이썬\n" + 
				"3. C언어\n" + "4. 망둥어\n" + "정답은 ?";
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println(msg);
		choice = sc.nextInt();
		
		resultMsg = choice == answer ? "정답!" :
			choice > 0 && choice < 5? "오답ㅠㅠ" : "다시 시도해주세요.";
		
		System.out.println(resultMsg);
	}

}

필기

 

* 예) 손 서연을 저장하는 방법

     1. next를 사용

          - next는 공백 or \n을 끝으로 알기때문에 '손'만 저장이 된다.

            따라서, '손 서연'을 저장하기 위해서는 

              System.out.println( name + sc.next() + "님 환영합니다.");

                  (위의 두번째 코드 참조)

            공백만큼 sc.next()를 추가해야한다.

     2. nexLine을 사용

          - nextLine은 공백과 엔터도 저장하기 때문에 한번에 저장 가능!

 

* next는 공백 또는 엔터를 먹지x

  nextLine은 먹기 때문에 두 문장의 출력을 받을 경우( next 후에 nextLine을 쓸 때),

  nextLine을 한번 더 넣어줘야한다.

 

* 클래스를 형변환하기 위해서는 자료형클래스 안의 메소드를 써야함.

     int : Integer.parseInt(  )

     double : Double.parseDouble()

 

* JOptionPane. ...으로 값을 받으면 그 문장 자체가 값이 되기 때문에 저장소에 넣어줘야함!

  출력오류가 있다면 저장소에 잘 저장했는지 확인하기.

 

* // 를 쓰고 지울 경우, //가 되어있는 줄끼리 묶어야 지울 수 있다.

  공백인 칸을 같이 드래그할 경우, //가 한번 더 써진다.