기록해! 정리해!

자바 - 형변환 , 연산 우선수위, 구구단 본문

JAVA

자바 - 형변환 , 연산 우선수위, 구구단

zsuling 2022. 7. 4. 17:57

07/04

 

고급언어 : 사람이 이해할 수 있는 언어 (C, JAVA, C++, PHP ..)

저급언어 : 기계어 (0과 1로 이루어진 언어), 어셈블리어


컴파일언어 : C, JAVA,  C++, C#

1) 전체파일을 기계어로 한번에 번역하여 실행

2) 속도가 빠르다

 

인터프리터 언어 : HTML, JavaScript, SQL, Python

1) 각각의 명령어 라인을 한개씩 번역하여 실행

2) 속도가 느리다


자바

1) 1995년 자바 <---> 파이썬 1991년 <---> C언어 1972년

2) 이식성이 높다. 객체지향언어다. (=클래스 지향 언어다.)

3) 함수적 스타일 코딩을 지원한다. (람다식 표현 : -> )

4) 메모리를 자동으로 관리해준다.

5) 다양한 애플리케이션을 개발

6) 멀티스레드

7) 막강한 오픈 소스 라이브러리가 풍부하다


JDK 설치

a.java ------> a.class --> a.exe

소스 ( 컴파일 ) 기계로 번역


public             static                void     main        (String[]         args) {

접근제어자 정적메모리할당 리턴형 메소드 (매개변수의 형 매개변수)

                    정적메소드                    main메소드는 형태를 바꿀 수 없음


º 사용할 수 있는 변수이름  규칙 : $, _ ,영문자

º  예약어는 사용할 수 없다. (for, if ...)

package test;

public class Hello {

public static void main(String[] args) {

int $age = 0; //정수형 변수 선언하기
double _value = 0.0; //실수형 변수 선언하기
System.out.println($age+":"+_value);
System.out.println("환영합니다");

}

}


package test;

public class Hello {

public static void main(String[] args) {

int value = 30; 
int result = value + 10; --초기값 필요
System.out.println("result:" + result);

}

}


1. main 메소드없는 클래스 TestEx 작성

2. main 메소드있는 클래스에 new TestEx(); 로 작성되면 클래스였던 것이 객체가 됨

TestEx t1 = new TestEx();
        t1.toString();
    System.out.println(t1.toString());
    
TestEx t2 = new TestEx();
        t2.toString();
    System.out.println(t2.toString());

변수 ) 객체가 다른 메모리를 사용한다

객체 ) 값이 같으면 같은 메모리를 사용한다

    int a = 100;
	int b = 100;

클래스 안에 쓸 수 있는 3가지

: 필드 / 생성자 / 메소드 

 

º 필드(=변수)

 int kor;

º 생성자 (클래스 이름과 같은 메소드)

 TestEx(){
	
 }

기본 생성자를 호출한것.

기본 생성자는 public이 생략이 되어있는 상태

생성자의 역할 : 값을 초기화하는 것

 TestEx(){
	kor = 100;
 }

º 메소드 (명령어들을 묶어준다)

괄호 안에 있는 것 : 지역변수 ex.eng --자기 영역안에서만 영향을 미침

괄호 밖에 있는 것 : 전역변수 ex.kor --전체에 영향을 미침


º try, catch, finally  

 

finally : 무조건 실행

package test;

public class TestEx {

	void testEx(){
	 
		try { 
			System.out.println("try영역");
	    }catch(Exception ex) {
	    	System.out.println("catch영역");
	    }finally {
	    	System.out.println("finally영역");
    	 }
 
	}
}

try가 실행되다가 예외가 발생하면 catch가 실행됨

package test;

public class TestEx {

	void testEx(){
	 
		try { 
			System.out.println("try영역");
			int k = 100 / 0 ;
			System.out.println(k + "출력");
	    }catch(Exception ex) {
	    	System.out.println("catch영역");
	    }finally {
	    	System.out.println("finally영역");
    	 }
 
	}
}

지역변수 위에서 String str 선언하고

그 값이 return 되게끔

package test;

public class TestEx {

	String testEx(){
	 String str = "";
		try { 
			System.out.println("try영역");
			 str = "1";
			int k = 100 / 0 ;
			System.out.println(k + "출력");
	    }catch(Exception ex) {
	    	System.out.println("catch영역");
	    	str = "2";
	    }finally {
	    	System.out.println("finally영역");
	    	str = "3";
    	 }
    return str;
	}
}

무조건 finally가 실행되니까 3


º 데이터 타입 (정수형/ 실수형/ 논리형)

 

package test;

public class TestEx {
   //1.필드(=변수) 2.생성자 3.메소드
void testEx(){

//1. 정수형
byte b = -128;// -128 ~ 127
char c1 = '가'; // 문자를 직접 저장
char c2 = 65; // 10진수로 저장
short s; // -32,768 ~ -32,767 사이의 숫자
int i; // 자바의 정수 기본타입
long l1 = 10L; //선택사항(L을 붙히면 long형이라는걸 정의해 줄 수 있다)
long l2 = 3147483647L; // 필수사항 (int보다 큰 값을 정의해 줄 때)

//2. 실수형
float f;
float f1 = 10;
float f2 = 10.5f; //필수사항 
double d; //실수 기본타입
double d1 = 10; 
double d2 = 10.5; 
double d3 = 10.5d;//선택사항 

//3. 논리형
    boolean bool;
    
    System.out.println(b);
    System.out.println(c1 + ":" + c2);
    System.out.println(l1 + ":" + l2);
   

º 묵시적형변환 (=자동형변환)

: 작은형을 큰형으로 변환하는 것

 int k = 2147483646;
 long i = k; //묵시적형변환(=자동형변환)
 System.out.println(i);
 
 float f1 = 5.5f;
 double f2 = f1; //묵시적형변환
 System.out.println(f2);

º 명시적형변환 (=강제형변환)

: 큰형을 작은형으로 변환하는 것 ()사용

 

  long k가 int에 들어갈 수 있는 값만 가능하다

		 long k = 2147483646;
		 int i = (int)k; //강제형변환
		 System.out.println(k);

  숫자 -> 문자로 바꾸기 가능 / 문자 -> 숫자 불가능

		 int f1 = 100;
		 String f11 = Integer.toString(f1); //숫자를 문자로 변환 
		 String f12 = String.valueOf(f1); //숫자를 문자로 변환 
		 System.out.println(f11);
		 System.out.println(f12);
         System.out.println(f11+f12);

문자니까 200이 아니라 100100임

문자값을 숫자로 변환하기 (됨)

	     String ii = "100";
	     int ii1=Integer.parseInt(ii);
	     int ii2=Integer.parseInt(ii);
	     System.out.println(ii1+ii2);

문자를 숫자로 변환하기 (안됨)

인터넷으로 넘어오는 모든 값은 문자다

숫자로 받아 쓰려면 Integer.parseInt형변환을 해야한다

	     String jj = "ABC";
	     int jj1=Integer.parseInt(jj);
	     int jj2=Integer.parseInt(jj);
	     System.out.println(jj1+jj2);

숫자니까 100+100 =200 

 

º  숫자 앞에 0을 쓴다는 건 문자열로 정의한다는 뜻이다

숫자면 앞에 0을 안쓰겠지.

산술연산을 하냐 안하냐에 따라 숫자로 나타내고 문자로 나타내기도 한다

:ex. 010

 

º 정수 + 실수 = 실수

	     String ii = "100";
	     int ii1=Integer.parseInt(ii);
	     double ii2 = Double.parseDouble(ii);
	     System.out.println(ii1+ii2);

 

º 연산식 변환

--자동형변환

		 int intvalue = 10;
		 double doublevalue = 5.5;
		 double result = intvalue + doublevalue;
		 System.out.println(result);

--강제형변환

		 int intvalue = 10;
		 double doublevalue = 5.5;
		 int result = intvalue + (int)doublevalue;
		 System.out.println(result);

º 캐릭터는 꼭 ' ' 띄어써야함 !

 


º  연산자 비교 우선순위

int a = 0; int b = 0;
int d = 0;
if (a >= b) {
// 비교연산 : >=, <=, ==, !=

// 대입연산 : +=, -=, *=, /=

a += b; // a=a+b
d += 1; // d=d+1

 

º 

int var1 = 1;
int var2 = 2;
int var3 = 3;

int result = (var1+var2)/var3;

System.out.println(result);

º  전위연산 / 후위연산

 

int k = 10;
System.out.println(++k); //전위연산자 11
System.out.println(k); // 11

int m = 10;
System.out.println(m++); //후위연산자 10
System.out.println(m); // 11

 

º 구구단

package test;

public class TestEx {

	void testEx(int dan) {

		for(int i = 1; i <=9 ; i++) {
			int result = dan * i;
			System.out.println(dan + " X "+i+" = "+result);
		}
	}
}
package test;

public class Hello {

	public static void main(String[] args) {
		
		TestEx t = new TestEx();
         t.testEx(3);

	}

}

º  리턴값이 여러개일 때 리스트형으로 잡아서 값을 넘기는 법

ResultVo 만들고

getter ~ / toString 두개 추가하기

package test;

public class ResultVo {

	   String result;

	   public String getResult() {
	      return result;
	   }

	   public void setResult(String result) {
	      this.result = result;
	   }

	   @Override
	   public String toString() {
	      return "ResultVo [result=" + result + "]";
	   }
	   
	}
package test;

	import java.util.ArrayList;
    import java.util.List;

	public class TestEx {

	    List<ResultVo> li = null;

		List<ResultVo> testEx(int dan) {

	    	li = new ArrayList<ResultVo>();
	    	
	   for(int i=1; i<=9; i++) {
		   
	       ResultVo m= new ResultVo();
		   int result= dan*i;
	       String str = dan + "X" + i + "=" + result;
	       m.setResult(str);
	       li.add(m);
	      }
	      return li;
	   }
	}
package test;

import java.util.List;

public class Hello {

	public static void main(String[] args) {
		
		TestEx t = new TestEx();
         List<ResultVo> li = t.testEx(5);
         
         for(int i= 0 ; i < li.size(); i++){
           ResultVo m = li.get(i);
           System.out.println(m.result);
           
         }
         
         System.out.println();
	}

}

º 매개변수 2개 받기

(3단에서 5단까지 출력하기)

 

 List<ResultVo> li = t.testEx(3,5);

package test;

import java.util.ArrayList;
import java.util.List;

public class TestEx {
   
   List <ResultVo>li= null;
   
   List<ResultVo> testEx(int dan1, int dan2) { //여기부터 지역변수
   li = new ArrayList<ResultVo>();
   
   for(int dan =dan1; dan<=dan2; dan++) {
   for(int i=1; i<=9; i++) {
      ResultVo m= new ResultVo();
      int result= dan*i;
      String str = dan+" x "+i+" = "+ result;
      m.setResult(str); //setResult : 값을 대입하는 것 
      li.add(m); // 1부터9까지의 결과값을 li 에 다 쌓아두는 것 
         }
      }
   
      return li;
   }
}

-- 가로로 나타내기

	package test;

	import java.util.ArrayList;
    import java.util.List;

	public class TestEx {

	    List<ResultVo> li = null;

		List<ResultVo> testEx(int dan1, int dan2) {

	    	li = new ArrayList<ResultVo>();
	    
	    for ( int dan = dan1 ; dan <= dan2 ; dan++) {
	    	ResultVo m= null;
	    	String str="";
			for (int i = 1; i <= 9; i++) {
				
				m = new ResultVo();
				int result = dan * i;
				String str1 = dan + "X" + i + "=" + result + "\t";
				str = str + str1; //결과값을 누적 --옆으로 찍힘
				
				
			}
				m.setResult(str);
 		        li.add(m);
		}
	      return li;
	   }

	}

º

 

List<ResultVo> testEx(int dan1, int dan2) {     //콜렉션

List<ResultVo> li = new ArrayList<ResultVo>(); //for문 밖에서 변수찍기
    
    for ( int dan = dan1 ; dan <= dan2 ; dan++) {
     ResultVo m= null;
     String str=""; //for문 밖에서 선언하기
for (int i = 1; i <= 9; i++) {

m = new ResultVo();
int result = dan * i;
String str1 = dan + "X" + i + "=" + result + "\t";
str = str + str1; //결과값을 누적 --옆으로 찍힘

}
m.setResult(str); //for문 밖에 있음
          li.add(m);
}
      return li; //for문 밖에 있음
   }

 

 return값은 1개밖에 받을 수 없다 

 

 

 

Comments