본문 바로가기

개발일지/Java + Spring

[java] 0916 정리 및 예제

<cmd명령프롬프트에서 컴파일>
cd\(change directory) 현재 디렉터리 이름을 보여주거나 바꿈
dir(directory) 디렉터리에 있는 파일과 하위 디렉터리 목록을 보여줌
help 치면 설명이 나옴

cd\ => dir => cd eclipse-workspace =>dir => cd HellowTest => cd src => dir => javac Hellow.java
=> dir => java Hellow.java / java Hellow => 수고했어요 (내용)출력

\ - 루트폴드



public class LoginTest { }
public 접근제한자 부분. 아무나 들어와도 된다는 뜻이다. 

static void main(String[] args) { }
static 점접 함수 라는 뜻으로 클래스에서 사용하는 자원이다.
void 이 안에 있는 것은 하나의 함수이지만 void는 아무것도 보내 줄 수 없다. 그 말인즉슨 실행을 하고 값을 돌려 줄 수 없다(return 안 됨)


 

String a = args[0] 문자열입력
args 아규먼츠는 외부에서 입력을 받음

int a = integer.parseInt(args[0]) 숫자(정수)입력
Scanner는 내부에서 입력을 받음

 


 

 

gate 함수 안에는 여러가지 기능을 가지고 있다.
.메소드(); - 다양한 기능 중에 그 기능만 실행을 한다. 각자의 기능이 있음

 


 

프로젝트 클래스 만드는 창에서 활성화가 안 되는 이름은 이미 만든 class 이름이거나 다른곳에서 사용하는 이름이다!

 


클래스를 많이 만들었을 때, 만들어진 클래스를 메인에서 불러다 쓸 거다.

Scanner sc = new Scanner(System.in);
그 때도 이런 식으로 만들어서 쓰는 거다.



끌어다 쓰는 것을 상속이라고 함 (나중에 배울 것)

 



문제를 던져주고 순서도를 그림 -> 순서도를 보고 코딩을 하는 것이 알고리즘 훈련

 


<상수 / for문 연습>

public class Main_8 {
	final static int N = 15; 

	public static void main(String[] args) {
		
		for(int i=-N; i<= N; i++) {
			for(int j=-N; j<=N;j++) { //자바에서는 int를 넣어야 됨
				if(i*i + j*j <= N*N){
					System.out.print("*");
					}else {
						System.out.print(" ");
					}
			}
			System.out.println();
		}

	}

}

 

final static int N = 15;

여기서 중요한 것은 상수를 만들어 주었고 대문자 이름을 갖고 있다는 점


<while문>

public class Program_10 {

	public static void main(String[] args) {
		int i = 1;
		int sum = 0;
		
		while(true) {
			sum += i++;
			if(i == 51) break;
		}
		System.out.println(sum);

	}

}
1275

1~50까지 수를 더해라 51이 되면 break 중단한다.


<Scanner 객체와 equals 메소드>

import java.util.Scanner;

public class FlowTest22 {

	public static void main(String[] args) {
	Scanner sc = new Scanner(System.in); //자바의 기본 입출력
	String anser = "서울";
	String inString = "";
	do{
		System.out.println("대한민국 수도를 입력하세요");
		System.out.print("수도이름 입력 : ");
		inString = sc.next();
		if(inString.equals(anser)) {
			System.out.println("대한민국 수도는 " + anser + "입니다.");
			break;
		}
		System.out.println("다시 입력해주세요");
	}
	while(true); //서울을 입력하지 않으면 무한루프
	}

}

단어가 맞는지 구별해주는 메소드는 equals를 사용한다.

(나중에 낱말 맞추기 게임 만들어도 될듯)


<break, break aaa; continue 구분>

public class FlowTest23 {

	public static void main(String[] args) {
		int num = 0;
		char c = 'A';
		aaa:while(true) {
			while(true) {
				num++;
				System.out.print(c++ + " ");
				if(num%5 == 0) {
					break;
				}
				if(num == 26) {
					break aaa;
				}
			}
			System.out.println();
		}

	}

}


break; 가장 가까운 반복문을 빠져나감

break aaa; aaa: 레이블로 돌아간다. 가능한 거의 안 쓰는데 그냥 알아만 두고 가자

continue; 가장 가까운 반복문의 다음 실행문으로 이동한다.

 

여기서 char c의 'A' 경우는 아스키코드(ASCII-CODE) 65에 해당한다. 그래서 c++을 했을 때 ABCDE로 올라가는 것임

 


<continue>

public class Test2 {

	public static void main(String[] args) {
		int sum = 0;
		for(int i=1;i<=10;i++) {
			if(i==5) { continue; }
			else {
				sum += i;
				System.out.print(i+" ");
			}
		}
		System.out.println();
		System.out.println(sum);
	}

}

일반 continue만 했을 때
continue한 부분만 빼고 계산을 하니까 1~10까지 5만 빼고 다 더한 값이 50이 나온다. 

1 2 3 4 6 7 8 9 10
50

 

<continue label지정>

public class Test2 {

	public static void main(String[] args) {
		int sum = 0;
		aa:for(int i=1;i<=10;i++) {
			if(i==5) { continue aa; }
			else {
				sum += i;
				System.out.print(i+" ");
			}
		}
		System.out.println();
		System.out.println(sum);
	}

}

for 앞에 aa로 라벨을 잡아두고, 컨티뉴 뒤에 aa를 해뒀을 때.. 끝나면 지정한 라벨로 이동한다. 

1 2 3 4 6 7 8 9 10
50

 

public class Test3 {

	public static void main(String[] args) {
		int sum = 0;
		for(int i=1;i<=10;i++) {
			
			if(i==5) break;
            sum += i;
			System.out.print(i+" ");
		}
		System.out.println();
		System.out.println(sum);
	}

}
1 2 3 4
10

break의 경우 빠져나가기 때문에 4까지만 계산하고 나간다. 

 

 

while문에도 될까? 안 됨!

public class Program_13 {

	public static void main(String[] args) {
		int sum = 0;
		int i = 1;
		ss: while(i<=10) {
			sum += i;
			i++;
			if(i == 5) continue ss;
		}
		System.out.print(sum);
	}

}