논리적 순서가 중요한 이유는 에러가 생겼을 때 역으로 논리적 순서를 따라 추적해야하기 때문이다
클래스 내에 선언되어 있는 기능을 수행하기 위한 코드를 의미해요. 클래스 안에 여러개의 메소드가 존재할 수 있고 클래스 안에서 혹은 다른 메소드 외부에서 만들어요. 코드를 재사용하기 위해 사용하는데 메소드에 집어넣는 값에 따라서 반환값이 달라집니다. 메소드 안에 또다른 메소드를 만들순없어요
[수식어] 리턴타입 메소드이름([매개변수1,매개변수2,..]) { 본문 }
- 수식어 : public, private, static ... [생략가능]
- 리턴타입 : 자료타입(int, double, String, class), void
- 매개변수 : 메소드를 호출할 때 전달하는 데이터
메소드의 사용 목적을 분명히하고 나서 만들어야 사용하지않고 공간만 차지하는 메소드 줄일 수 있어요!
- ctrl+함수이름 : 해당 함수의 위치로 옮겨짐
이 단축키를 사용하면 함수 코드를 볼 수 있지만 매번 함수를 찾아가서 기능을 확인할 순 없잖아요? 그래서 기능을 함수의 이름으로 대충 추측할 수 있게끔 함수이름을 잘 지어야한답니다. 그리고 함수들은 서로 독립적이라 변수의 이름이 같아도 서로 다른 메소드라면 오류가 생기지않아요!
프로그램이 실행될 때 생성하도록 선언하는 키워드입니다. static 메소드에서는 static으로 선언된 메소드만 호출가능해요! 각 수식어들은 다음에 다시 자세하게 다뤄보아용
- 첫번째 글자는 숫자로 시작할 수 없고 문자, $, _ 만 가능함
- 영어 대소문자가 구분됨 (ex. int abc; int ABC; 다른 변수)
- 첫 문자가 영어 소문자고 그 뒤 단어의 첫 문자는 대문자 (카멜 규칙)
- 문자 수(길이) 제한없음
- 자바 예약어는 사용할 수 없음
클라이언트(웹사이트)와 서버가 인터넷을 통해 연결하고 있는 구조에요
파트를 나눌수록 나눠지는데 크게는 데이터를 제공하는 프론트엔드, 데이터를 저장하는 백엔드로 둘이 나뉩니다. 앱도 똑같아요.
- 요구사항 수집
- 요구사항 바탕으로 기능 정의
- 기능 정의를 바탕으로 검증
- 설계
- 기능 구현
- 기능 테스트
- 프로그램 배포
요구사항 단계가 가장 중요합니다 정상적으로 작동하는 프로그램이여도 요구사항과 일치하지 않는건 좋은 프로그램이 아니에요
n>=2, f(0)=1, f(1)=1, f(2)= 2, f(3)=3, 일 때 f(19)까지의 피보나치 수열값 출력
1. f(2) : f(1)+f(0)=1+1=2
2. f(3) : f(2)+f(1)=2+1=3
3. f(4) : f(3)+f(2)=3+2=5
= f(n) : f(n-1)+f(n-2)
int[] fibo = new int[20];
fibo[0] = 1;
fibo[1] = 1;
for (int i = 0; i < fibo.length; i++) {
if (i >= 2) {
fibo[i] = fibo[i - 1] + fibo[i - 2];
}
}
for (int b : fibo) {
System.out.print(b + " ");
}
19*19 크기의 바둑판에서 n개의 흰돌을 놓는 (x,y)좌표를 입력받기
1. 흰돌 위치는 1, 빈 바둑판은 0으로 출력
2. 만약 바둑판 전체 x:1~19, y:1~19(0~18)에서 x,y 좌표를 입력받으면 [x-1][y-1]를 1로 저장
int[][] baduk=new int[19][19];
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
int x=0,y=0;
for(int i=0;i<num;i++) {
x=sc.nextInt();
y=sc.nextInt();
baduk[x-1][y-1]=1;
}
sc.close();
for(int[] ba:baduk) {
for(int duk:ba) {
if(duk!=1) {
duk=0;
}
System.out.print(duk+" ");
}
System.out.println();
}
배열이 null로 초기화 되어있고 조건문에서 배열의 범위을 채운다면 해당 조건문이 실행되기 전에는 배열의 null값으로 인해 에러가 발생함.
이 경우 에러발생을 막기 위해 예외처리가 필요.
System.out.println("<학생 점수 관리 프로그램>");
int[] scores=null; //학생 점수. null로 초기화. 변수만 선언하고 size를 지정안함
int studentNum=0; //학생 수
Scanner sc=new Scanner(System.in);
boolean run=true;
while(run) {
System.out.println("----------------------------------------------------------");
System.out.println("1.학생수입력 | 2.점수입력 | 3.점수목록 | 4.분석 | 5.종료");
System.out.println("----------------------------------------------------------");
System.out.print("선택>");
int selectNo=sc.nextInt();
if(selectNo==1) {
System.out.print("학생 수를 입력하세요>");
studentNum=sc.nextInt();
scores=new int[studentNum];
System.out.println("학생 수 : "+studentNum);
}else if(selectNo==2) {
if(scores!=null) {//예외처리
for(int i=0;i<scores.length;i++) {
System.out.print((i+1)+"번 학생의 점수를 입력하세요>");
scores[i]=sc.nextInt();
}
}else {
System.out.println("1번부터 진행해주세요");
}
}else if(selectNo==3) {
if(scores!=null) {
for(int score : scores) {
System.out.println(score);
}
}else {
System.out.println("1번부터 진행해주세요");
}
}else if(selectNo==4) {
if(scores!=null) {
int sum=0;
double avg=0.0;
for(int sco : scores) {
sum+=sco;
}
avg=(double)sum/studentNum;
System.out.println("합계 : "+sum);
System.out.println("평균 : "+ avg);
}else {
System.out.println("1번부터 진행해주세요");
}
}else if(selectNo==5) {
run=false;
}else {
System.out.println("잘못된 접근입니다.");
}
}
sc.close();
i의 범위 : 0~length-1
j의 범위 : 0부터 한바퀴 돌때마다 length-1이 i씩 작아짐.
for(int i=0;i<num.length-1;i++) {
for(int j=0;j<num.length-1-i;j++) {
if(num[j]>num[j+1]) {
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}