heap - 객체가 저장되는 곳(garbage collector 있음)

stack - 메소드 호출과 지역변수가 저장되는 곳

instance variable - 클래스 내에서 선언한 변수

local variable - 메소드 안에서 선언한 변수


지역변수도 저장된 객체는 변수만 스택에 저장



'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA]정적필드, 정적메소드  (0) 2014.03.18
[JAVA] String <-> int, double, float 변환  (0) 2014.02.28
[JAVA] ArrayList, LinkedList, Stack, Queue  (0) 2014.01.09
[JAVA] 계산기  (0) 2014.01.05
package DataStructure_Test;

import java.util.*;

class ArrayListTest {
	public static void main(String[] args) {
		// ArrayList
		ArrayList<integer> var1 = new ArrayList<integer>();
		var1.add(1);
		var1.add(2);
		var1.add(3);
		var1.add(0, 4);
		for (int i = 0; i < var1.size(); i++) {
			System.out.println(var1.get(i).intValue());
		}

		// LinkedList
		LinkedList<string> var2 = new LinkedList<string>();
		var2.add("str1");
		var2.add("str2");
		var2.add("str3");
		for (int i = 0; i < var2.size(); i++) {
			System.out.println(var2.get(i).toString());
		}

		// Stack
		LinkedList<string> stack1 = new LinkedList<string>();
		stack1.push("stack1");
		stack1.push("stack2");
		stack1.push("stack3");
		while (!stack1.isEmpty()) {
			System.out.println(stack1.pop());
		}

		// Queue
		LinkedList<string> queue1 = new LinkedList<string>();
		queue1.offer("queue1");
		queue1.offer("queue2");
		queue1.offer("queue3");
		while (!queue1.isEmpty()) {
			System.out.println(queue1.poll());
			// System.out.println(queue1.peek());
			// peek() 메서드는 가져오기만 하므로 무한루프
		}
	}
}

'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA] String <-> int, double, float 변환  (0) 2014.02.28
[JAVA] heap, stack 메모리  (0) 2014.01.24
[JAVA] 계산기  (0) 2014.01.05
[JAVA] 은행 통장 입출금 예제  (2) 2014.01.05

 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-3770 3.50GHz

 Memory

 4 GB

 OS

 Window 7 Professional 32bit

 Java

 1.7.0_51

 Android

 SDK : 4.4.2 (KitKat) / 테스트기기 : Galaxy S3 4.3(Jelly Bean)

 WebServer

 Apache Tomcat 7.0

 DB

 MySQL 5.6.15


src/MenuCheck.java
import android.os.Bundle;
import android.app.Activity;
import android.util.*;
import android.view.*;
import android.widget.*;

public class Menucheck extends Activity {
	TextView mText;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.menucheck);
		mText = (TextView) findViewById(R.id.textsize);

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.menucheck, menu);
		return true;
	}

	public boolean onPrepareOptionsMenu(Menu menu) {
		if (mText.getTextSize() >= 80) {
			menu.findItem(R.id.bigsize).setChecked(true);
		} else {
			menu.findItem(R.id.bigsize).setChecked(false);
		}
		String sex = (String) mText.getText();

		if (sex.equals("MAN")) {
			menu.findItem(R.id.man).setChecked(true);
		}
		if (sex.equals("GIRL")) {
			menu.findItem(R.id.girl).setChecked(true);
		}
		return true;
	}

	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.bigsize:
			Log.v("Test1", "F" + mText.getTextSize());
			if (item.isChecked()) {
				mText.setTextSize(20);
			} else {
				mText.setTextSize(40);
			}
			Log.v("Test1", "L" + mText.getTextSize());
			return true;
		case R.id.man:
			mText.setText("MAN");
			return true;
		case R.id.girl:
			mText.setText("GIRL");
			return true;
		
		}
		return false;
	}
}
layout/menucheck.xml

    

    


menu/menucheck.xml


    
        
    

    
        
            
                
                
            
        
    


 


 


 



※ 먼저 USB드라이버를 설치합니다.

USB드라이버(삼성) 다운로드(링크)

USB드라이버 넥서스 다운로드(링크)



 핸드폰(갤럭시S3)으로 디버깅 하기


1. 개발자 옵션이 보이지 않을 때, 디바이스 정보 -> 빌드 번호를 여러번 클릭하면 몇번남았다고 메세지가 보이면서 아래 사진과 같이 나타납니다. 


2. 핸드폰으로 디버깅을 하기 위하여 USB 디버깅에 체크



3. 현재 프로젝트의 AndroidManifest.xml에서 아래와 같이 추가합니다.



4. 프로그램을 실행하게 되면 아래와 같이 보여주면서 선택할 수 있다.



역시 에뮬레이터와는 상대가 안되는 속도이다.... 훨씬 테스트하기 좋은 것 같다.



※ Android taget unkown state offine 인식문제 해결하기

내가 해결한 방법은 USB드라이버 재설치 후 이클립스 재시작.

혹은 Android Device Chooser 띄우고 adb.exe 프로세스 종료하고 핸드폰 다시 연결한 뒤에

핸드폰 화면에 디버깅한다는 메세지에 확인하면 연결된다.

위 방법이 안된다면 ADB.exe 프로세서를 종료 후 다시 시작하라는 소리도 있지만 그 전에 해결되어서 확인해보진 못했다.






import java.awt.*;
import java.awt.event.ActionListener;

import javax.swing.*;

class MainClass{
	public static void main(String[] args) {
		
		// window 창 설정
		JFrame frame = new JFrame("simple calculator");
		frame.setLocation(500, 400);
		frame.setPreferredSize(new Dimension(300, 200));
		Container contentPane = frame.getContentPane();

		JTextField resultField = new JTextField();
		contentPane.add(resultField, BorderLayout.NORTH);

		GridLayout button_layout = new GridLayout(4, 4);
		JPanel panel_button = new JPanel();
		panel_button.setLayout(button_layout);

		
		JButton[] nums = new JButton[10];
		nums[0] = new JButton("0");
		nums[1] = new JButton("1");
		nums[2] = new JButton("2");
		nums[3] = new JButton("3");
		nums[4] = new JButton("4");
		nums[5] = new JButton("5");
		nums[6] = new JButton("6");
		nums[7] = new JButton("7");
		nums[8] = new JButton("8");
		nums[9] = new JButton("9");
		
		JButton clr = new JButton("C"); // clear
		JButton equals = new JButton("="); // result
		JButton add = new JButton("+");
		JButton sub = new JButton("-");
		JButton mul = new JButton("*");
		JButton div = new JButton("/");

		panel_button.add(nums[7]);
		panel_button.add(nums[8]);
		panel_button.add(nums[9]);
		panel_button.add(add);
		panel_button.add(nums[4]);
		panel_button.add(nums[5]);
		panel_button.add(nums[6]);
		panel_button.add(sub);
		panel_button.add(nums[1]);
		panel_button.add(nums[2]);
		panel_button.add(nums[3]);
		panel_button.add(mul);
		panel_button.add(nums[0]);
		panel_button.add(equals);
		panel_button.add(clr);
		panel_button.add(div);

		contentPane.add(panel_button, BorderLayout.CENTER);

		// event
		
		ActionListener numberPressListener = new NumberButtonListener(resultField);
		for(int i = 0; i < 10; i++) {
			nums[i].addActionListener(numberPressListener);
		}

		clr.addActionListener(numberPressListener);
		equals.addActionListener(numberPressListener);
		add.addActionListener(numberPressListener);
		sub.addActionListener(numberPressListener);
		mul.addActionListener(numberPressListener);
		div.addActionListener(numberPressListener);
		
		// window 띄우기
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();
		frame.setVisible(true);
	}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

class NumberButtonListener implements ActionListener {
	JButton btn;
	JTextField result;

	private int total = 0;
	private char op = ' ';

	NumberButtonListener(JTextField result) {
		this.result = result;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String getBut = e.getActionCommand();
		String presentVal = result.getText();

		if (getBut == "0") {
			if(!presentVal.equals("0")) {
				result.setText(presentVal + getBut);
			}
		} else if (getBut == "1") {
			result.setText(presentVal + getBut);
		} else if (getBut == "2") {
			result.setText(presentVal + getBut);
		} else if (getBut == "3") {
			result.setText(presentVal + getBut);
		} else if (getBut == "4") {
			result.setText(presentVal + getBut);
		} else if (getBut == "5") {
			result.setText(presentVal + getBut);
		} else if (getBut == "6") {
			result.setText(presentVal + getBut);
		} else if (getBut == "7") {
			result.setText(presentVal + getBut);
		} else if (getBut == "8") {
			result.setText(presentVal + getBut);
		} else if (getBut == "9") {
			result.setText(presentVal + getBut);
		} else if (getBut == "C") {
			result.setText("");
			total = 0;
		} else if (getBut == "+") {
			int temp =  Integer.parseInt(presentVal);
			switch (op) {
			case '+':
				total += temp;
				break;
			case '-':
				total -= temp;
				break;
			case '*':
				total *= temp;
				break;
			case '/':
				total /= temp;
				break;
			default:
				total = temp;
			}
			op = '+';
			result.setText("");
		} else if (getBut == "-") {
			int temp =  Integer.parseInt(presentVal);
			switch (op) {
			case '+':
				total += temp;
				break;
			case '-':
				total -= temp;
				break;
			case '*':
				total *= temp;
				break;
			case '/':
				total /= temp;
				break;
			default:
				total = temp;
			}
			op = '-';
			result.setText("");
		} else if (getBut == "*") {
			int temp =  Integer.parseInt(presentVal);
			switch (op) {
			case '+':
				total += temp;
				break;
			case '-':
				total -= temp;
				break;
			case '*':
				total *= temp;
				break;
			case '/':
				total /= temp;
				break;
			default:
				total = temp;
			}
			op = '*';
			result.setText("");
		} else if (getBut == "/") {
			int temp =  Integer.parseInt(presentVal);
//			total = total / Integer.parseInt(presentVal);
			switch (op) {
			case '+':
				total += temp;
				break;
			case '-':
				total -= temp;
				break;
			case '*':
				total *= temp;
				break;
			case '/':
				total /= temp;
				break;
			default:
				total = temp;
			}
			op = '/';
			result.setText("");
		} else if (getBut == "=") {
			int temp = Integer.parseInt(presentVal);
			switch (op) {
			case '+':
				total += temp;
				break;
			case '-':
				total -= temp;
				break;
			case '*':
				total *= temp;
				break;
			case '/':
				total /= temp;
				break;
			default:
				total = temp;
			}
			op = ' ';
			result.setText("" + total);
			System.out.println(total);
		}
	}

}
MainClass.java
public class MainClass {
	public static void main(String[] args) {

		basicFunc start = new basicFunc();
		start.play();
	}
}
BasicFunc.java
import java.util.Scanner;

class BasicFunc {
	void play() {
		String name;
		String accountNo;
		int limit;
		System.out.println("사용자메뉴");
		Scanner in = new Scanner(System.in);
		loop: while (true) {
			System.out.println("1. 일반 통장 개설");
			System.out.println("2. 마이너스 통장 개설");
			System.out.println("3. 종료");
			System.out.print("->");
			int chk = in.nextInt();
//			try {
				in.nextLine();
				switch (chk) {
				case 1:
					System.out.println("일반 통장 개설");
					System.out.print("이름 : ");
					name = in.nextLine();
					System.out.print("계좌번호 : ");
					accountNo = in.nextLine();
					System.out.println(name + ", " + accountNo);
					try{
					Account person = new Account(name, accountNo);
					person.play();
					}catch(Exception e) {
						System.out.println(e.getMessage());
					}
				
					
					
					break;
				case 2:
					System.out.println("마이너스 일반 통장 개설");
					System.out.print("이름 : ");
					name = in.nextLine();
					System.out.print("계좌번호 : ");
					accountNo = in.nextLine();
					System.out.print("한도 : ");
					limit = in.nextInt();
//					Account personM = new AccountM(name, accountNo, limit);
//					personM.play();
					break;
				case 3:
					break loop;
				default:
					System.out.println("다시 입력해주세요.");

				}
//			} catch (Exception e) {
//				System.out.println(e.getMessage());
//			}
		}
		System.out.println("system quit..");
	}
}
Account.java
import java.util.Scanner;

public class Account {
	String name; // 예금주 이름
	String accountNo; // 계좌번호
	int balance; // 잔고

	// 생성자
	Account() {
	}

	Account(String name, String accountNo) throws Exception {
		if(name.equals("\n") || accountNo.equals(null)) {
			System.out.println("값 없음");
			throw new Exception("값을 모두 입력하세요.");
		}
		this.name = name;
		this.accountNo = accountNo;
	}

	// ----------------------
	// 생성자 끝

	void play() {
		Scanner in = new Scanner(System.in);
//		System.out.print("이름 : ");
//		this.name = in.nextLine();
//		System.out.print("계좌번호 : ");
//		this.accountNo = in.nextLine();
		int temp;
		int chk = 1;
		loop: while (chk != 0) {
			try {
				System.out.println("1. 입금, 2. 출금, 3. 정보, 0. 종료");
				System.out.print("->");
				int num = in.nextInt();
				switch (num) {
				case 1:
					System.out.print("입금얼마?");
					temp = in.nextInt();
					inputMoney(temp);
					break;
				case 2:
					System.out.print("출금얼마?");
					temp = in.nextInt();
					outputMoney(temp);
					break;
				case 3:
					infoPrint();
					break;
				case 0:
					break loop;
				default:
					System.out.println("다시입력하시오");
				}

			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
	}

	void infoPrint() {
		System.out.println("이름 : " + name);
		System.out.println("게좌 : " + accountNo);
		System.out.println("잔액 : " + balance);
	}

	void inputMoney(int amount) {
		this.balance += amount;
		System.out.println(amount + "원을 입금하고, 잔액은 " + balance + "원입니다.");
	}

	void outputMoney(int amount) throws Exception {
		if (balance < amount) {
			throw new Exception("잔액이 부족합니다.");
		} else {
			balance -= amount;
			System.out.println(amount + "원을 인출하고, 잔액은 " + balance + "원입니다.");
		}
	}

	void calculateInterest() {

	}
}
AccountM.java
import java.util.Scanner;

public class AccountM extends Account {
	int limit = 0; // 마이너스 한도

	// 생성자
	AccountM() {
		// 기본 한도 500만원.
		this.limit = 500;
	}

	AccountM(String name, String accountNo, int limit) throws Exception {
		super(name, accountNo);
		this.limit = limit;
	}

	// ----------------------
	// 생성자 끝

	void play() {
		Scanner in = new Scanner(System.in);
		System.out.print("이름 : ");
		this.name = in.nextLine();
		System.out.print("계좌번호 : ");
		this.accountNo = in.nextLine();
		System.out.print("한도 : ");
		this.limit = in.nextInt();
		int temp;
		int chk = 1;
		loop: while (chk != 0) {
			try {
				System.out.println("1. 입금, 2. 출금, 3. 정보, 0. 종료");
				System.out.print("->");
				int num = in.nextInt();
				switch (num) {
				case 1:
					System.out.print("얼마?");
					temp = in.nextInt();
					inputMoney(temp);
					break;
				case 2:
					System.out.print("얼마?");
					temp = in.nextInt();
					outputMoney(temp);
					break;
				case 3:
					infoPrint();
					break;
				case 0:
					break loop;
				default:
					System.out.println("다시입력하시오");
				}

			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
	}

	// 오버라이딩
	void infoPrint() {
		System.out.println("이름1 : " + name);
		System.out.println("게좌 : " + accountNo);
		System.out.println("한도금액 : " + limit);
		System.out.println("잔고 : " + balance);
		System.out.println("인출가능잔액 : " + (balance + limit));
	}

	void inputMoney(int amount) {
		this.balance += amount;
		System.out.println(amount + "원을 입금하고, 잔액은 " + (balance + limit)
				+ "원입니다.");
	}

	// 오버라이딩
	void outputMoney(int amount) throws Exception {
		if ((balance + limit) < amount) {
			throw new Exception("잔액이 부족합니다.");
		} else {
			balance -= amount;
			System.out.println(amount + "원을 인출하고, 인출가능잔액은 " + (balance + limit)
					+ "원입니다.");
		}
	}
}


'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA] ArrayList, LinkedList, Stack, Queue  (0) 2014.01.09
[JAVA] 계산기  (0) 2014.01.05
[JAVA] * 별 출력하기_10 다이아몬드  (0) 2013.11.15
[JAVA] * 별 출력하기_09 마름모  (0) 2013.11.14

* 별 출력하기_10 다이아몬드


public class Star {

	public static void main(String args[]) {

		int input = 5;
		int st = 0;
		input = (input % 2 == 0) ? input - 1 : input;
		st = input/2;
		
		for (int line = 0; line < input; line++) {
			for (int put = 0; put < (input - st); put++) {
				System.out.print((put >= st) ? "*" : " ");
			}
			st = line < (input / 2) ? st - 1 : st + 1;
			System.out.println();
		}
	}
}


'대학 생활 > JAVA' 카테고리의 다른 글

[JAVA] 계산기  (0) 2014.01.05
[JAVA] 은행 통장 입출금 예제  (2) 2014.01.05
[JAVA] * 별 출력하기_09 마름모  (0) 2013.11.14
[JAVA] 스무고개 만들기  (0) 2013.10.28
※ 메인메서드아닙니다.
void shape(int size) {
		// 3보다 큰 수 홀수 입력받아야하고, 잘못받으면 계속 입력받아야 한다.
		int mid = size / 2 + 1;
		int star = mid;
		for(int line = 1, blank = (size/2); line <= size; line++) {
			for(int colum = 1; colum <= star; colum++) {
				System.out.print(blank >= colum ? " " : "*");
			}
			System.out.printf("\t\t\t star : %d, blank : %d\n", star, blank);
			star = ((line < mid) ? star+1 : star-1);
			blank = ((line >= mid) ? blank+1 : blank-1);
		}
	}

STSEG SEGMENT STACK 'stack'

DB 64 DUP(?)

STSEG ENDS

;---

DTSEG SEGMENT

DATA1 DB 'mY NAME is jUn'

ORG 0020H

DATA2 DB 14 DUP(?)

DTSEG ENDS

;----

CDSEG SEGMENT

MAIN PROC FAR

ASSUME CS:CDSEG, DS:DTSEG, SS:STSEG

MOV AX, DTSEG

MOV DS, AX

MOV SI, OFFSET DATA1

MOV BX, OFFSET DATA2

MOV CX, 14

BACK: MOV AL, [SI]

CMP AL, 41H

JB OVER

CMP AL, 5AH

JA OVER

OR AL, 00100000B

OVER: MOV [BX], AL

INC SI

INC BX

LOOP BACK

MOV AH, 4CH

INT 21H

MAIN ENDP

CDSEG ENDS

END MAIN

인터넷 어디선가 퍼온 ifstream 클래스

 

Public 멤버

생성자 - 객체를 생성하며 부가적으로 파일과 연관시킬 수 있다.
rdbuf : filebuf 객체를 얻는다.
is_open : 파일이 열려있는지 확인한다.
open : 파일을 연다.
close : 파일을 닫는다.

istream 으로 부터 상속 받은 멤버들

operator>> : 서식화된 데이터를 추출(입력)한다.
gcount : 마지막 서식화 되지 않은 입력에서 받아들였었던 문자의 개수를 구한다.
get : 스트림으로 부터 서식화 되지 않은 데이터를 얻는다.
getline : 스트림으로 부터 한 줄을 입력받는다.
ignore : 문자들을 입력 받고 지운다.
peek : 그 다음으로 추출될 문자를 얻어온다.
read : 데이터 블록을 읽는다.
readsome : 버퍼에서 읽기 가능한 데이터 블록을 읽어온다.
putback : 문자를 다시 집어넣는다.

unget : get pointer 을 감소 시킨다.
tellg : get pointer 의 위치를 얻는다.
seekg : get pointer 의 위치를 설정한다.
sync : 입력 버퍼를 문자들의 소스에 동기화 시킨다.
sentry : 예외로 부터 안전한 접두/접미 작업을 수행한다. (클래스)

ios 로 부터 상속 받은 함수들

good : 스트림의 상태가 입출력 작업을 할 수 있는지 확인한다.
eof : eof 비트가 설정되었는지 확인한다.
fail : fail 비트나 bad 비트가 설정되었는지 확인한다.
bad : bad 비트가 설정되었는지 확인한다.
operator! : 스트림 객체에 오류 플래그(fail 비트나 bad 비트)가 설정되었는지 확인한다.
operator void* : 포인터로 변환한다.
rdstate : 오류 상태 플래그(error state flag)를 얻어온다.
setstate : 오류 상태 플래그를 설정한다.
clear : 오류 상태 플래그들을 설정한다
copyfmt : 서식 정보를 복사한다.
fill : 채우기 문자(fill character) 을 얻거나 설정한다.
exceptions : 예외 마스크를 얻거나 설정한다.
imbue : 로케일을 설정한다.

tie : 엮어진 스트림(tied stream)을 얻거나 설정한다.

rdbuf : 연관된 스트림 버퍼를 얻거나 설정한다.
narrow : 표준 char 형으로 문자를 변환한다.
widen : 표준 wchar_t 형으로 문자를 변환한다.

ios_base 로 부터 상속된 함수들

flags : 서식 플래그를 수정하거나 얻어온다.
setf : 특정 서식 플래그를 설정한다.

unsetf : 특정 서식 플래그를 초기화 한다.

precision : 부동 소수점 정밀도를 수정하거나 얻어온다.

width : 필드의 너비를 수정하거나 얻어온다
imbue : 로케일을 채운다.
getloc : 현재 로케일을 얻어온다
xalloc : 내부 확장 가능 배열의 새로운 인덱스를 리턴한다. (정적 함수)
iword : 내부 확장 가능 배열의 특정 정수 원소의 레퍼런스를 얻는다.
pword : 내부 확장 가능 배열의 포인터의 레퍼런스를 얻는다.
register_callback : 이벤트 콜백 함수를 등록한다.
sync_with_stdio : iostream 과 cstdio 스트림과의 동기화를 활성화 하거나 비활성화 한다.


 window 7에서 어셈블하고 Debug하기


과제를 하려는데 제 컴퓨터(윈도우7 64bit)에서는 debug도 안되고 masm이 없어서 아무것도 안되서 이것저것 찾아 보았습니다.

더 편한 방법이 있겠지만 급한대로 요긴하게 사용할 수 있을 것 같아 올립니다.


** DOSBOX에서 'link 파일명' 할 때 파일이 있는데 오브젝트파일을 찾을 수 없다는 메세지가 뜰 경우.

-> .obj 파일의 이름은 8글자까지만 link되는 것 같습니다. 

아래 파일을 다운받고 실행은 모두 파일을 저장한 폴더 내에서 실행하셔야 합니다.


debug.exe


link.exe


masm.exe


ml.exe

※ 파일 올린 것에 문제가 있다면 말씀해주시면 바로 삭제하겠습니다.


1. 먼저 cmd에서 어셈블해서 obj 파일을 만들어 줍니다.


2. 실행파일을 만들기 위한 link는 DOSBox에서 실행합니다.

    관련글 

    [어셈] win7 debug 사용방법 - DOSBox 다운, 사용

    [어셈] win7 debug 사용방법

    [어셈] Debug 프로그래밍 - 들어가기, 내용 확인 변경하기

    [어셈] Debug 프로그래밍 - 작성, 실행하기



3. 실행파일이 만들어지면 도스박스에서 디버그해서 확인할 수 있습니다.




import java.util.Random;
import java.util.Scanner;

public class Smugogae {
	public static void main(String[] args) {
		Random ran = new Random();
		Scanner in = new Scanner(System.in);
		int val = ran.nextInt(20) + 1;
		int input;
		int cnt = 0;

		System.out.println("답:" + val);

		System.out.println("스무고개(1~20)");
		do {
			System.out.print("input : ");
			input = in.nextInt();
			if (val > input) {
				System.out.printf("%d보다 큽니다.\n", input);
			} else if (val < input) {
				System.out.printf("%d보다 작습니다.\n", input);
			}
			cnt++;
			System.out.println("count " + cnt);
		} while (input != val && cnt < 20);

		if (cnt > 20) {
			System.out.println("val = " + val);
			System.out.println("20번이 넘었습니다.");
		} else {
			System.out.println("val = " + val);
			System.out.println("count = " + cnt);
		}
	}
}
먼저 학번과 성적이 저장된 파일이 존재해야한다.
/*
    목적 : 파일을 읽어 각 반의 학생의 성적과 합계, 평균을
   		  구하고 각 과목의 반평균을 구한다.
    작성날짜 : 2013.09.23
 */
#include <stdio.h>
#include <stdlib.h>

// 상수들 
#define PEPLE_NUM 181	// 총학생수 정의

void openFile(FILE* fp);
void printClass(int class);

// 학생 정보를 저장하기 위한 구조체 선언
typedef struct student{
	char class_st[10];
	int class[3];
	int score[5];
	int total;
	float average;
} Student;

// 모든 함수에서 사용하기 위해 전역부에 선언
Student stu[PEPLE_NUM];

int main(int argc, char *argv[]) {
	
	FILE* fp = fopen("scr2013.txt", "r");
	if (fp == NULL) {
		printf(" File is null.\n");
		return -1;
	}
	openFile(fp);
	fclose(fp);

	printf("┌──────────────────────┐\n");
	printf("│  초등학교 1학년 성적 일람표 출력하기.  │\n");
	printf("└──────────────────────┘\n");

	while(1) {
		int in = 0;
		printf("  어느 반을 출력할 것입니까?(exit=0) : ");
		scanf("%d", &in);

		if(in == 0) {
			printf("program exit...\n");
			break;
		}
		// 성적일람표 출력 함수 실행
		printClass(in);
	} // while

	return 0;
}

/* =============== openFile ======================================
  파일을 읽어서 구조체 배열에 저장하고 총점, 평균 구하는 함수
	사전조건 : main에서 읽은 파일을 배열에 입력하기 위해서
			   매개변수 fp로 받아온다.
 	사후조건 : 구조체 배열에 점수를 입력하고 총점, 평균을 구한다.
 */
void openFile(FILE* fp) {
// 지역정의
	int temp;
	int i;

// 문장들
	// 파일 읽어서 구조체 배열에 입력하기
	for(i=0; i < PEPLE_NUM; i++) {
		fscanf(fp, "%s %d %d %d %d %d", &(stu[i]).class_st, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].score[3], &stu[i].score[4]);

		// 입력받은 문자열인 학번을 integer로 변환하기 위해 atoi함수를 사용했다.
		temp = atoi(stu[i].class_st);
		stu[i].class[0] = temp / 10000;
		stu[i].class[1] = (temp - (stu[i].class[0] * 10000)) / 100;
		stu[i].class[2] = (temp - (stu[i].class[0] * 10000) - (stu[i].class[1] * 100)) / 1;
	}

	// 입력받은 점수로 총점, 평균 계산하기
	for(i = 0; i < PEPLE_NUM; i++) {
		stu[i].total = stu[i].score[0] + stu[i].score[1] + stu[i].score[2] + stu[i].score[3] + stu[i].score[4];
		stu[i].average = stu[i].total / 5.0;
	}

} // openFile
//================= openFile End =================================


/* =============== printClass  ===================================
   출력하고자 하는 반을 주어진 틀에 맞게 출력하는 함수.
     사전조건 : 출력하고자하는 반을 매개변수로 받는다.
	 사후조건 : 헤더를 출력하고 학생들의 정보를 모두 출력한다.
	 			모두 출력하고 난뒤에 각 과목의 반평균을 출력한다.
 */
void printClass(int class) {
// 지역정의
	int i;
	int count = 0;
	float kor = 0;
	float math = 0;
	float social = 0;
	float science = 0;
	float pe = 0;

// 문장들
	printf("\n  1 학년 %2d 반 성적일람표\n", class);
	printf(" 학번  국어  산수  사회  과학  체육  총점  평균 \n");
	printf("------------------------------------------------\n");
	// 학생 출력.
	for(i = 0; i < PEPLE_NUM ;i++ ) {
		if(stu[i].class[1] == class) {
			printf("%5s  %3d   %3d   %3d   %3d   %3d   %3d   %3.1f \n", stu[i].class_st, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].score[3], stu[i].score[4], stu[i].total, stu[i].average);
			kor += stu[i].score[0];
			math += stu[i].score[1];
			social += stu[i].score[2];
			science += stu[i].score[3];
			pe += stu[i].score[4];
			count++;
		}
	}
	// 학생이 없을 경우 출력.
	if(count == 0) {
		printf("               자료가 없습니다.\n\n");
		return;
	}

	printf("------------------------------------------------\n");
	printf("반평균  %3.1f  %3.1f  %3.1f  %3.1f  %3.1f \n\n", kor/(float)count, math/count, social/count, science/count, pe/count);
} // printClass
//================= printClass End ===============================


/* squential search, binary search
   단어 찾기 프로그램
	작성자 : 김영준
	날짜 : 2013/10/3
*/
#include <stdio.h>
#include <string.h>

// 전역선언
typedef struct words {
	char words[30];	// 파일중 제일 긴 단어 22자
} Words;

const int MAX_SIZE = 26000;

// 기본형선언
void readWords(Words* wordsArray, int* last);
void seqSearcah(Words wordsArray[], int last); 
void binarySearch(Words wordsArray[], int last);

int main(void) {
// 지역정의 
	Words wordsArray[MAX_SIZE];
	int last = 0;

// 문장들
	readWords(wordsArray, &last);
	seqSearch(wordsArray, last);
	printf("\n");
	binarySearch(wordsArray, last);
	return 0;
} // main

/* ================= readWords =================
	파일을 읽어서 배열에 적재한다.
	사전조건		wordsArray는 채워져야 할 배열
				last는 마지막 요소의 인덱스
	사후조건		배열이 채워짐
*/
void readWords(Words* wordsArray, int* last) {
// 지역변수
	char buf[256];
	FILE* fp = fopen("/usr/dict/words", "r");

// 문장들
	if(fp == NULL) {
		printf("File is null\n");
		exit(1);
	}

	printf("단어 읽는 중");
	while(fgets(buf, sizeof(buf), fp) != NULL) {
			//개행문자 삭제
			buf[strlen(buf)-1] = 0;
			// 문자열 복사 함수 strcpy() 사용.
			strcpy(wordsArray[*last].words, buf);
			(*last)++;
			if(*last % 1000 == 0) {
				printf(".");
			}
	}
	printf("%d 단어의 사전 구축 완료\n", *last);
	fclose(fp);
} // readWords

/* ================= seqSearch =================
	순차적 찾기로 목표를 찾는다.
	모두 찾고나면 결과를 출력한다.
	사전조건		wordsArray는 데이터를 가지고 있는 배열
				last는 마지막 요소의 인덱스
*/
void seqSearch(Words wordsArray[], int last) {
	int looker;
	char target[256];

	printf("영어 단어 찾기(Sequential Search)\n");
	printf("==================================\n");

	while(1) {
		looker = 0;
		printf("단어 입력(quit:ESC) : ");
		fgets(target, sizeof(target), stdin);
		// 개행문자 삭제
		target[strlen(target)-1] = 0;

		if(target[0] == 27){
			printf("Program quit...\n");
			break;
		}

		// seqSearch
		while(looker < last && strcasecmp(target, wordsArray[looker].words)) {
			looker++;
		}

		// 결과 출력
		if(!strcasecmp(target, wordsArray[looker].words)) {
			printf("단어 %s 찾음 비교횟수 : %d\n", target, looker+1);
		} else {
			printf("단어 %s 찾기실패 비교횟수 : %d\n", target, looker+1);
		}
	}

	printf("==================================\n");
	printf("Sequential search 끝\n");

} // seqSearch

/* ================= binarySearch =================
	이진 찾기로 목표를 찾는다.
	모두 찾고나면 결과를 출력한다.
	사전조건		wordsArray는 데이터를 가지고 있는 배열
				last는 마지막 요소의 인덱스
*/
void binarySearch(Words wordsArray[], int end) {
// 지역변수
	int looker;
	char target[256];
	int first, mid, last;
	int cnt = 0;

// 문장들
	printf("영어 단어 찾기(binary Search)\n");
	printf("==================================\n");
	
	while(1) {
		looker = 0;
		first = 0;
		last = end;
		cnt = 0;

		printf("단어입력(quit:ESC) : ");
		fgets(target, sizeof(target), stdin);
		// 개행문자 삭제
		target[strlen(target)-1] = 0;

		if(target[0] == 27) {
			printf("Program quit...\n");
			break;
		}

		// binarySearch
		while( first <= last) {
			mid = (first + last) / 2;
			if(0 < strcasecmp(target, wordsArray[mid].words)) {
				first = mid + 1;
			} else if(0 > strcasecmp(target, wordsArray[mid].words)) {
				last = mid - 1;
			} else {
				break;
			}
			cnt++;
		}

		// 결과 출력
		if(!strcasecmp(target, wordsArray[mid].words)) {
			printf("단어 %s 찾음 비교횟수 : %d\n", target, cnt+1);
		} else {
			printf("단어 %s 찾기실패 비교횟수 : %d\n", target, cnt+1);
		}

	}

	printf("==================================\n");
	printf("Sequential search 끝\n");
} // binarySearch


1. 프로그램 세그먼트의 개요

최소한 3개의 세그먼트로 구성 : 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트

코드 세그먼트 : 프로그램이 수행해야 할 명령어들을 가지고 있다

데이터 세그먼트 : 코드 세그먼트에 있는 명령어 들이 처리해야 할 데이터를 저장하는 곳

스택 세그먼트 : 일시적으로 정보를 보관하는 곳

 

1.1 세그먼트의 시작 위치와 정의

세그먼트 : 메모리의 한 영역, 최대 64kb의 공간을 차지, 시작번지는 0H로 끝나는 번지로 항상 16으로 나누어 떨어져야 한다.

 

1.2 논리 번지와 물리 번지

물리번지(physical address) : CPU의 어드레스 핀에 출력, 메모리 인터페이스 회로에 의해 디코드되는 20비트 번지, 8086 명 리얼모드(286, 386, 486)에서 모두 00000H~FFFFFH. 1mb의 메모리 범위 내에 있음. ROM, RAM의 실제 번지.

옵셋 번지(offset address) : 64kb 세그먼트 범위 내에 있는 번지로 0000H~FFFFH의 값을 가짐.

논리 번지(logical address) : 세그먼트의 값과 옵셋 번지로 결정


ex) CS:IP 24F6:634A

논리번지 : 24F6:634A

옵셋번지 : 634A

물리번지 : 24F60H + 634AH = 2B2AAH

(H는 16진수를 표현한다.)  

물리번지의 최소값 : 24F60 + 0000 = 24F60

코드 세그먼트의 최대값 : 24F60 + FFFF = 34F5F

 

1.3 코드 세그먼트

프로그램을 수행하기 위해 8086은 명령어를 코드 세그먼트에서 읽어옴. 명령어의 논리 번지는 항상 CS(code segment)와 IP(instruction pointer)로 구성되며 CS:IP로 표현한다.

 

1.4 리틀 엔디언 규칙

16비트의 데이터를 저장할 땐, 하나의 번지에 1바이트의 데이터가 저장되므로 2개의 번지에 나누어야 하는데 그때 하위바이트는 아래쪽의 번지에, 상위 바이트는 위쪽의 번지에 저장하는 것을 말한다.

 

1.5 엑스트라 세그먼트

ES(extra segment)는 여분의 데이터 세그먼트로 쓰임. 문자열(string)을 다루는 데 있어서 중요한 역할을 한다.

 

1.6 IBM PC의 메모리 맵

RAM

640K

00000H ~ 9FFFFH

(0~255 : 인트럽터벡터테이블,

BIOS 데이터 영역)

Video Display

RAM 238K

A0000H ~ BFFFFH

ROM

256K

C0000H ~ FFFFFH

(F0000H ~ FFFFFH 까지만 BIOS에 의해 사용)


1.6.1 RAM

휘발성 메모리로써 메모리를 관리하는 일은 아주 복잡하기 때문에 사용자에게 맡겨지지 않고 DOS에 맡겨진다. 일반 사용자는 물리 번지를 지정하는 것에 대한 지식이 없기 때문에 CS, DS, SS 같은 세그먼트 레지스터의 값을 직접 다루지 않는다.

 

1.6.2 ROM

비휘발성 메모리로 C0000H에서 FFFFFH까지가 ROM을 위한 할당이다. 이중 F0000H에서 FFFFFH까지의 64KB만 BIOS에 의해 사용된다. 그 외의 공간은 여러 가지 어댑터 카드에 의해 쓰이거나 비어 있다.

 

1.6.3 BIOS ROM의 기능

CPU는 메모리에 저장되어 잇는 프로그램만 수행할 수 있으므로 전원 스위치를 켰을 때 CPU가 수행해야 할 프로그램을 보관하고 있는 비휘발성 메모리가 필요하다. ROM에 저장되어 있는 이런 프로그램들 PC에서는 BIOS라고 하며, RAM과 CPU에 저장되어 있는 여러 가지 장치를 테스트하고 에러를 사용자에게 알려준다. 주변기기에 대한 테스트와 초기화가 모두 끝나게 되면 DOS를 RAM에 적재하고, PC의 컨트롤을 DOS에게 넘겨준다.

 

 

 

 

 

 

 

 

앞 포스팅과 다른점은 try-catch 위치 변경.
package Test03;


class MainClass {
	public static void main(String[] args) {
		// 객체 생성, 메서드 호출, for한번 허용
		MultiplicationTable play = new MultiplicationTable();
		for (int chk = 0; chk != 1;) {
			try {
				chk = play.inputValue(chk);
				play.outputResult();
			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
	}
}
package Test03;

import java.util.Scanner;

class MultiplicationTable {
	int input_first, input_last;

	int inputValue(int chk) throws Exception {
		// 입력
		Scanner in = new Scanner(System.in);
		System.out.print("구구단의 시작단을 입력하세요 ");
		this.input_first = in.nextInt();
		System.out.print("구구단의 마지막단을 입력하세요  ");
		this.input_last = in.nextInt();

		// 예외 발생시키기
		if (input_first > input_last) {
			throw new Exception("시작단은 마지막단보다 작아야합니다.");
		}
		if ((input_first < 2) || (input_last > 9)) {
			throw new Exception("구구단은 2~9단을 입력하세요.");
		}
		// 예외가 일어나지 않아야 밑으로 이동
		chk = 1;
		return chk;

	}

	void outputResult() {
		for (int dan = input_first; dan <= input_last; dan += 3) {
			for (int line = 1; line < 10; line++) {
				System.out.printf(dan > input_last ? " " : "%d x %d = %2d  ",
						dan, line, (dan * line));
				System.out.printf(dan + 1 > input_last ? " "
						: "%d x %d = %2d  ", dan + 1, line, ((dan + 1) * line));
				System.out.printf(dan + 2 > input_last ? "\n"
						: "%d x %d = %2d\n", dan + 2, line, ((dan + 2) * line));
			}
			System.out.println("");
		}
	}
}

인터넷에 검색하면 많이 나오는 코드이다.

하지만 컴퓨터가 너무 빠른이유인지 모르겠지만... 0초가 나온다.


#include <stdio.h>
#include <time.h>

int main(void) {
    clock_t start, end;
    double timechk;

    start = clock();

    int i;
    for(i = 0; i < 20000; i++) {
        //실행할 문장들
    }

    end = clock();
    timechk = (double)(end - start) / CLOCKS_PER_SEC;
    printf("time : %f\n", timechk);

    return 0;
}


다음은 결과값이 나온 코드이다. 정확한지는 모르겠지만 결과는 나온다... 우선 이걸로 측정해야겠다.
#include <stdio.h>
#include <sys/time.h>

int main(void) {
    struct timeval start, end;
    double timechk;

    // 현재시간
    gettimeofday(&start, NULL);

    int i;
    for(i = 0; i < 10000; i++) {}

    // 계산
    gettimeofday(&end, NULL);
    timechk = (double)(end.tv_sec) + (double)(end.tv_usec) / 1000000.0 -
        (double)(start.tv_sec) - (double)(start.tv_usec) / 1000000.0;
    printf("%f\n", timechk);

    return 0;
}


public class MainClass02 {
	public static void main(String[] args) {
		MultiplicationTable start = new MultiplicationTable();
		start.inputValue();
		start.outputResult();
//		start.outputResult2();
	}
}
import java.util.Scanner;

public class MultiplicationTable {
	int input1, input2;

	void inputValue() {
		// void inputValue() throws Exception{
		int chk = 0;
		while (chk != 1) {
			try {
				// 입력
				Scanner in = new Scanner(System.in);
				System.out.print("first value : ");
				this.input1 = in.nextInt();
				System.out.print("second value : ");
				this.input2 = in.nextInt();

				// 예외 발생시키기
				if ((input1 > input2)) {
					throw new Exception("\n첫번째 값은 뒷자리보다 작은 수를 입력하시오.\n");
				} else if ((input1 > 9) || (input2 > 9)) {
					throw new Exception("\n9 미만의 수를 입력하시오.\n");
				}

				// 예외가 일어나지 않아야 밑으로 이동
				chk = 1;
			} catch (Exception e) {
				System.err.println(e.getMessage());
				// System.err.println(e);
			}
		}
	}

	void outputResult() {
		for (int dan = input1; dan <= input2; dan += 3) {
			for (int line = 1; line < 10; line++) {
				System.out.printf(dan > input2 ? " " : "%d x %d = %2d  ", dan,
						line, (dan * line));
				System.out.printf(dan + 1 > input2 ? " " : "%d x %d = %2d  ",
						dan + 1, line, ((dan + 1) * line));
				System.out.printf(dan + 2 > input2 ? "\n" : "%d x %d = %2d\n",
						dan + 2, line, ((dan + 2) * line));
			}
			System.out.println("");
		}
	}
}

헤더 : string.h

기능 : 문자열을 구분자로 나누어준다.

char* strtok(char* strToken, const char* strDelimit);


strtok() 함수는 내부적으로 검색한 위치를 기억하고 있으므로, 다음번에 실행할 땐 다음 위치부터 검색한다.



#include <stdio.h>
#include <string.h>
#define TOKEN ","

int main(void) {
    char* temp;
    char str[] = "string,int";
    temp = strtok(str, TOKEN);

    printf("str : %s\n", str);
    printf("temp : %s\n", temp);

    temp = strtok(NULL, TOKEN);
    printf("str : %s\n", str);
    printf("temp : %s\n", temp);

    return 0;
}




public class StarTest {

	public static void main(String args[]) {
		int input = 5;
		int st = 0;
		input = (input % 2 == 0) ? input - 1 : input;

		for (int line = 0; line < input; line++) { 
			for (int put = 0; put < (input - st); put++) {
				System.out.print((put >= st) ? "*" : " ");
			}
			st = line < (input / 2) ? st + 1 : st - 1;
			System.out.println();
		}
	}
}

설명




public class Star08 {
	public static void main(String args[]) {

		int in = 5;
		int st = 0;
		for (int line = 0; line < in; line++) {
			for (int put = 0; put < in; put++) {
				System.out.print((put > st) && (put<in-st-1) ? "  " : "* ");
			}
			if (line < in / 2) {
				st++;
			} else {
				st--;
			}
			System.out.println();
		}
	}
}


import java.util.Scanner;
public class Star06 {

	public static void main(String args[]) {

		Scanner scan = new Scanner(System.in);
		System.out.print("입력하세요 >> ");
		int in = scan.nextInt();
		int star = 1;

		for (int line = 1; line <= in; line++) {
			for (int k = 1; k <= in; k++) {
				System.out
						.print(((k >= star + 1) && (k <= in - star)) ? "  "
								: "* ");
			}
			if (line <= in / 2) {
				star++;
			} else {
				star--;
			}
			System.out.println();
		}
	}
}

대소문자를 구분하지 않고 문자열을 비교한다.

char* strcasecmp(const char *s1, const char *s2, size_t n);

헤더 : string.h

매개변수 : s1 -> 비교할 대상, s2 -> 대상과 비교할 문자열

리턴값 : 값 == 0    // s1 == s2

값 > 0    // s1 < s2

값 < 0    // s1 > s2

package SocialSecurityNumber_02;

import java.util.Scanner;

public class MainClass01 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.print("주민등록번호 : ");
		String num = in.nextLine();

		CheckNum01 chk = new CheckNum01(num);
		chk.play();
		
	}
package SocialSecurityNumber_02;

import java.util.Calendar;
import java.util.Scanner;

class CheckNum01 {
	StringBuffer num;
	int select;
	int year, month, day, sex, local, age;

	// 생성자
	CheckNum01(String temp) {
		// StringBuffer을 사용하라고 할까봐 넘겨주었는데 그닥...
		this.num = new StringBuffer(temp);

		char firstNum = num.charAt(7);

		this.year = Integer.parseInt(num.substring(0, 2));
		this.month = Integer.parseInt(num.substring(2, 4));
		this.day = Integer.parseInt(num.substring(4, 6));

		switch (firstNum) {
		case '1':
			this.year += 1900;
			this.sex = 0;
			this.local = 0;
			break;
		case '2':
			this.year += 1900;
			this.sex = 1;
			this.local = 0;
			break;
		case '3':
			this.year += 2000;
			this.sex = 0;
			this.local = 0;
			break;
		case '4':
			this.year += 2000;
			this.sex = 1;
			this.local = 0;
			break;
		case '5':
			this.year += 1900;
			this.sex = 0;
			this.local = 1;
			break;
		case '6':
			this.year += 1900;
			this.sex = 1;
			this.local = 1;
			break;
		case '7':
			this.year += 2000;
			this.sex = 0;
			this.local = 1;
			break;
		case '8':
			this.year += 2000;
			this.sex = 1;
			this.local = 1;
			break;
		case '9':
			this.year += 1800;
			this.sex = 0;
			this.local = 0;
			break;
		case '0':
			this.year += 1800;
			this.sex = 1;
			this.local = 0;
			break;
		}
	}

	// 원하는 것을 출력할 수 있도록 물어보는 메서드
	void play() {
		// while(select != 0)
		outerLoop: while (true) {
			System.out
					.println("MENU > 1: 생년월일 / 2: 나이 / 3: 성별 / 4: 내/외국인 / 0: Quit");
			System.out.print("Select Number-> ");
			Scanner in = new Scanner(System.in);
			select = in.nextInt();

			switch (select) {
			case 1:
				brithday();
				break;
			case 2:
				ageChk();
				break;
			case 3:
				sexChk();
				break;
			case 4:
				localChk();
				break;
			case 0:
				break outerLoop;
			// return;
			}
			System.out.println();
		}
		System.out.println("Quit...");
	}

	void brithday() {
		System.out.println("사용자는 '" + year + "년 " + month + "월 " + day
				+ "일생'입니다.");
	}

	void ageChk() {
		Calendar date = Calendar.getInstance();
		age = (date.get(Calendar.YEAR)) - year + 1;
		System.out.println("사용자의 나이는 '" + age + "'살 입니다.");
	}

	void sexChk() {
		System.out.println("사용자의 성별은 '" + (sex != 1 ? "남자" : "여자") + "'입니다.");
	}
	
	void localChk() {
		System.out.println("사용자는 '" +  (local != 1 ? "내국인" : "외국인") + "'입니다.");
	}
}

제가 자주 사용하는 단축키만 정리해 보았습니다.

Ctrl + 1

퀵 픽스

Ctrl + D

한 줄 삭제

Ctrl + Alt + 방향키(↑, ↓)

줄 복사, 블록 복사(블록상태)

Alt + 방향키(↑, ↓)

블록 이동

Ctrl + Shift + F

코드 포맷팅(문법 템플릿에 맞게 들여쓰기)

Ctrl + F11

전에 실행했던 클래스 실행

F3

선언된 변수, 메소드 정의부로 이동

 

 

Ctrl + L

원하는 라인 이동

Ctrl + / or Ctrl + 7

주석 //

Ctrl + Shift + /

블록 주석 /*  */

Ctrl + Shift + \

블록 주석 해제

Alt + Shift + J

해당 메서드/클래스에 대한 주석생성

 

 

Ctrl + Shift + X

대문자로 변환

Ctrl + Shift + Y

소문자로 변환

Ctrl + O

메소드, 필드 확인

Alt + 방향키(←, →)

열려있는 탭 이동 

Ctrl + k

블록한 문자열의 다음번째 문자열 검색

Ctrl + J

단축키 사용 후 단어입력하면 찾기

Ctrl + Shift + T

클래스 찾기

Ctrl + , or .

다음 annotation 이동(에러, 워닝, 북마크)

Alt + Shift + R

선택된 이름 한꺼번에 바꾸기 

  

F11

디버깅 시작

F8

디버깅 계속

F6

디버깅 한줄씩 실행

F5

디버깅 한줄씩 실행 함수 내부로 들어감

 

 

Ctrl + Shift + L

모든 단축키 보기


+ Recent posts