1. 반복문
1) for문
a. for문의 구성
for (①초기문; ②조건식; ④반복 후 작업) {
③작업문
}
b.for문을 이용하여 1부터 10까지 덧셈을 표시하고 합 구하기
public class ForSample {
public static void main(String[] args) {
int sum =0;
for(int i = 1; i <=10; i++) {
sum += i;
System.out.println(i);
if(i<=9)
System.out.println("+");
else {
System.out.println("=");
System.out.println(sum);
}
}
}
}
c. for문을 이용하여 1부터 10까지의 짝수, 홀수 합 구하기
public class test1 {
public static void main(String[] args) {
int even = 0;
int odd = 0;
for (int i=1; i<=10; i++)
if(i%2 == 0) {
even += i;
}else{
odd += i;
}
System.out.println(even);
System.out.println(odd);
}
}
2) While 문
a. while 문의 구성
while(①조건식) {
②작업문
}
반복 조건이 ture이면 반복, false이면 반복 종료
반복 조건이 없으면 컴파일 오류
처음부터 반복조건을 통과한 후 작업문 수행
b. -1이 입력될 때까지 입력된 수의 평균 구하기
import java.util.Scanner;
public class WhileSample {
public static void main(String[] args) {
int count = 0; // count는 입력된 정수의 개수
int sum = 0; // sum은 합
Scanner scanner = new Scanner(System.in);
System.out.println("정수를 입력하고 마지막에 -1을 입력하세요. ");
int n = scanner.nextInt(); // 정수 입력받기
while(n != -1) { // -1이 입력되면 while 문 벗어남
sum += n;
count++;
n = scanner.nextInt(); // 정수 입력받기
}
if(count == 0) System.out.println("입력된 수가 없습니다.");
else {
System.out.println("정수의 개수는 " + count + " 개이며");
System.out.println("평균은 " +(double)sum/count +"입니다.");
}
scanner.close();
}
}
3) do-while
a. do-while 문의 구성
do {
①작업문
} while (②조건식)
무조건 최소 한번 작업문 실행
반복 조건이 true이면 반복, false이면 반복 종료
반복 조건 없으면 컴파일 오류
4) 중첩 반복
a. 중첩 반복이란?
반복문이 다른 반복분을 내포하는 구조
이론적으로 몇 번이고 중첩 반복 가능
너무 많은 중첩 반복은 프로그램 구조를 복잡하게 하므로 2중 또는 3중 반복이 적당
b. 2중 중첩을 이용한 구구단 만들기 (for문 이용)
public class NestedLoop {
public static void main(String[] args) {
for(int i=1; i<10; i++){ // 1에서 9단
for(int j=1; j<10; j++) { // 각 단의 구구단 출력
System.out.print(j + "*" + i +"=" + i*j); // 구구셈 출력
System.out.print('\t'); // 하나씩 탭으로 띄기
}
System.out.println(); // 한 단이 끝나면 다음 줄로 커서 이동
}
}
}
5)continue 문
a. continue 문이란?
반복문을 빠져 나가지 않으면서 다음 반복으로 진행
b.continue 문을 이용하여 양수 합 구하기
import java.util.Scanner;
public class ContinueExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("정수를 5개 입력하세요.");
int sum = 0;
for (int i =0; i <5; i++)
{
int n = scanner.nextInt(); // 키보드에서 정수 입력받기
if (n <=0)
continue; // 양수가 아닌 경우 다음 반복으로 진행
else
sum += n; // 양수인 경우 덧셈
}
System.out.println("양수의 합은 " + sum);
scanner.close();
}
}
6) break문
a. break 문이란?
반복문 하나를 완전히 빠져 나갈 때 사용
하나의 반복문만 벗어남
중첩 반복의 경우 안쪽 반복문의 break 문이 실행되면 안쪽 반복문 벗어남
import java.util.Scanner;
public class BreakExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("exit을 입력하면 종료합니다.");
while(true) {
System.out.println(">>");
String text = scanner.nextLine();
if(text.equals("exit")) // 문자열 비교시 equals() 사용
break;
}
System.out.println("종료합니다.");
scanner.close();
}
}
2. 배열
1)배열
a. 배열이란?
a-1.인덱스와 인덱스에 대응하는 데이터들로 이루어진 자료 구조
배열을 이용하면 한 번에 많은 메모리 공간 할당 가능
a-2.같은 타입의 데이터들이 순차적으로 저장
인덱스를 이용하여 원소 데이터 접근
반복문을 이용하여 처리하기에 적합
a-3.배열 인덱스
0부터 시작
인덱스는 배열의 시작 위치에서부터 데이터가 있는 상대 위치
b. 배열의 필요성과 모양
c. 배열을 초기화하면서 생성한 결과
d. 배열 인덱스와 원소 접근
배열 변수명과 [] 사이에 원소의 인덱스를 적어 접근
배열의 인덱스는 0부터 시자
배열의 마지막 항목의 인덱스는 배열 크기 -1
ex) int intArray[] = new int[5]; // 원소가 5개인 배열 생성. 인덱스는 0~4까지 가능
ex) intArray[3] = 6; // 원소 3에 6 저장
ex) int n = intArray[3]; // 원소 3의 값을 읽어 n에 저장. n은 6이 된다!
e. 인덱스의 범위
인덱스로 음수 사용 불가, 인덱스의 범위를 넘지 말 것!
f. 배열에 입력받은 수 중 제일 큰 수 찾기
import java.util.Scanner;
public class ArrayAccess {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int intArray[] = new int[5]; // 배열생성
int max = 0; // 현재 가장 큰 수
System.out.println("양수 5개를 입력하세요. :");
for(int i =0; i<5; i++)
{
intArray[i] = scanner.nextInt();
if(intArray[i] > max)
max = intArray[i];
}
System.out.print("가장 큰 수는 " + max + " 입니다. ");
scanner.close();
}
}
g. 배열 원소의 평균 구하기
import java.util.Scanner;
public class ArrayLength {
public static void main(String[] args) {
int intArray[] = new int[5]; // 배열의 선언과 생성
int sum = 0;
Scanner scanner = new Scanner(System.in);
System.out.print(intArray.length + "개의 정수를 입력하세요 >>");
for(int i =0; i<intArray.length; i++)
intArray[i] = scanner.nextInt();
for(int i =0; i<intArray.length; i++)
sum += intArray[i];
System.out.print("평균은 " + (double)sum/intArray.length);
scanner.close();
}
}
h. 배열과 for-each 문과 예제
배열이나 나열의 각 원소를 순차적으로 접근하는데 유용한 for 문
public class foreachEx {
enum Week {월,화,수,목,금,토,일}
public static void main(String[] args) {
int [] n = {1,2,3,4,5};
String names[] = {"사과","배","바나나","체리","딸기","포도"};
int sum = 0;
// 아래 for-each에서 k는 n[0],n[1], ... , n[4] 로 반복
for (int k : n) {
System.out.print(k + " "); // 반복되는 k 값 출력
sum += k;
}
System.out.println("합은" + sum);
for(String s: names)
System.out.println(s + "");
System.out.println();
for(Week day : Week.values())
System.out.print(day + "요일");
System.out.println();
}
}
3. 2차원 배열
a. 2차원 배열 선언, 생성, 초기화
ex) int intArray[][] = {{0,1,2},{3,4,5,},{6,7,8}};
ex) char charArray[][] = {{'a','b','c'}, {'d','e','f'}};
b. 2차원 배열의 모양과 length 필드
c. 2차원 배열로 4년 평점 구하기
public class ScoreAverage {
public static void main(String[] args) {
double score[][] = {{3.3,3.4},
{3.5,3.6},
{3.7,4.0},
int count = 0; {4.1,4.2}};
double sum = 0;
for(int year=0; year<score.length; year++) // 각 학년별로 반복
for(int term=0; term<score[year].length; term++)
sum += score[year][term]; // 전체 평점 합
count ++;
int n = score.length;
int m = score[0].length;
System.out.println("4년 전체 평점 평균은 "+ sum/(n*m));
System.out.println("4년 전체 평점 평균은 "+ sum/count); // 결과는 같다.
}
}
4. 비정방형 배열
a. 정방형 배열
각 행의 열의 개수가 같은 배열
b. 비정방형 배열
각 행의 열의 개수가 다른 배열
비정방형 배열의 생성
c. 비정방형 배열의 length
i.length -> 2차원 배열의 행의 개수로서 4
i[n].length는 n번째 행의 열의 개수
i[0].length -> 0번째 행의 열의 개수로서 1
i[1].length -> 0번째 행의 열의 개수로서 2
i[2].length -> 0번째 행의 열의 개수로서 3
i[3].length -> 0번째 행의 열의 개수로서 4
d. 비정방형 배열의 생성과 접근 예제
public class IrregularArray {
public static void main(String[] args) {
int intArray[][] = new int [4][];
intArray[0] = new int [3];
intArray[1] = new int [2];
intArray[2] = new int [3];
intArray[3] = new int [2];
for(int i = 0; i<intArray.length; i ++)
for(int j =0; j<intArray[i].length; j++)
intArray[i][j] = (i+1)*10 +j;
for(int i=0; i < intArray.length; i++) {
for (int j =0; j < intArray[i].length; j++)
System.out.println(intArray[i][j] + "");
System.out.println();
}
}
}
5. 배열 리턴
1) 메소드에서 배열 리턴
a. 배열의 레퍼런스 리턴
b. 메소드의 리턴 타입
메소드의 리턴 타입과 리턴 받는 배열 타입과 일치
리턴 타입에 배열의 크기를 지정하지 않음
2) 배열 리턴 과정
3) 배열 리턴 예제
public class ReturnArray {
static int[] makeArray() { // 정수형 배열을 리턴하는 메소드
int temp[] = new int[4];
for (int i = 0; i < temp.length; i ++)
temp[i] = i; // 배열의 원소를 0,1,2,3 으로 초기화
return temp;
}
public static void main(String[] args) {
int intArray[]; // 배열 레퍼런스 변수 선언
intArray = makeArray(); // 메소드로부터 배열 전달받음
for (int i =0; i<intArray.length; i++)
System.out.println(intArray[i] + ""); // 배열 모든 원소 출력
}
}
6. main() 메소드
1) main()의 원형
a. 반드시 static
b. 반드시 pubilc
c .반드시 void
d. 반드시 매개 변수 타입은 문자열 배열
2) main() 메소드의 매개변수로 명령행 인자의 전달
3) 예제 main()에서 명령행 인자의 합 계산
public class Calc {
public static void main(String[] args) {
double sum = 0.0;
for (int i = 0; i<args.length; i++)
sum += Double.parseDouble(args[i]);
System.out.println("합계: " +sum);
}
}
7. 자바의 예외 처리
1) 컴파일 오류
a. 문법에 맞지 않게 작성된 코드
b. 컴파일할 때 발견
2) 예외
a. 오작동이나 결과에 악영향을 미칠 수 있는 실행한 오류
정수를 0으로 나누는 경우
배열보다 큰 인덱스로 배열의 원소를 접근하는 경우
존재하지 않는 파일을 읽으려고 하는 경우
정수 입력을 기다리는 코드가 실행되고 있을 때, 문자가 입력된 경우
3) 자바에서 예외 처리 가능
a. 예외 발생 -> 자바 플랫폼 인지 -> 응용프로그램에서 전달
4) 예제 0으로 나누기 예외 발생으로 프로그램이 강제 종료되는 경우
import java.util.Scanner;
public class DividebyZero {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int dividend;
int divisor;
System.out.print("나뉨수를 입력하시오:");
dividend = scanner.nextInt();
System.out.print("나눗수를 입력하시오 : ");
divisor = scanner.nextInt();
System.out.println(dividend + " 를 " + divisor + "로 나누면 몫은 " +dividend/divisor + "입니다. ");
scanner.close();
}
}
5) 자주 발생하는 예외
6) 예제 0으로 나눌 때 발생하는 ArithmeticException 예외처리
import java.util.Scanner;
public class DevideByZeroHandling {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.print("나뉨수를 입력하시오 :");
int dividend = scanner.nextInt();
System.out.print("나눗수를 입력하시오 :");
int divisor = scanner.nextInt();
try {
System.out.println(dividend + "를 " + divisor + "로 나누면 몫은 " + dividend/divisor + "입니다. ");
break;
}
catch(ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다! 다시 입력하세요 .");
}
}
scanner.close();
}
}
7) 입력 오류 시 발생하는 예외(InputMismatchException)
import java.util.InputMismatchException;
import java.util.Scanner;
public class InputException {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("정수 3개를 입력하세요 . :");
int sum =0, n=0;
for (int i =0; i <3; i++) {
System.out.print(i+">>");
try {
n = scanner.nextInt();
}
catch(InputMismatchException e) {
System.out.println("정수가 아닙니다. 다시 입력하세요!");
scanner.next();
i--;
continue;
}
sum += n;
}
System.out.println("합은 " + sum);
scanner.close();
}
}
'JAVA' 카테고리의 다른 글
java #문제풀기2 객체문제 (0) | 2021.05.02 |
---|---|
java #문제 풀기1 객체문제 (0) | 2021.05.01 |
java #4 메소드, 가비지 컬렉션, 맴버의 접근, static, non-static (0) | 2021.04.30 |
java #3 클래스와 객체(객체 지향, 생성자, this) (0) | 2021.04.29 |
java #1 식별자, 리터럴, 연산자, Scanner, if문, switch문 (0) | 2021.04.28 |