1. 반복문 (for문)
(1) 형식 :
for(초기식;조건식;증감식)
{
여러문장;
}
for문을 무한루프 돌리고 싶을때는 조건식을 생략하면 된다.
(2) 예제
package exam;
public class ForSample {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i, sum=0;;
for(i=1;i<=10;i++)
{
sum += i; //sum = sum + i
System.out.print(i);
if(i<=9) //1~9까지는 '+' 출력
System.out.print("+");
else{
System.out.print("="); //'='출력하고
System.out.print(sum); //덧셈 결과 출력
}
}
}
}
2. 반복문 (while문)
(1) 형식 :
초기식
while(조건식)
{
문장1; 문장2;
...
증감식;
}
while문을 무한루프 돌리려면 조건식을 참으로 만들어주면 됨 while(true)
(2) 예제(프로그램3-2 소스코드, 실행결과)
package exam;
import java.util.Scanner;
public class ForSample {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1~10 출력
Scanner sc = new Scanner(System.in);
System.out.println("정수를 입력하세요(0을 입력하면 결과가 출력됩니다) : ");
int i=0,num=0; //1.초기식
double sum = 0;
while((num = sc.nextInt()) != 0) //2.조건식
{
sum += num;
i++;
}
System.out.print("수의 개수는" + i + "개이며 ");
System.out.print("합은 "+ sum + "이며 ");
System.out.println("평균은 " + sum/i + "입니다.");
sc.close();
}
}
3. 반복문 (do~while문)
(1) 형식
초기식
do
{
문장...
증감식
}while(조건식);
(2) 예제 (소스코드, 결과, 주석:i가 1만 출력된 이유)
package exam;
import java.util.Scanner;
public class ForSample {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i;
i=1; //1.초기식
do{
System.out.println(i);
i++; //3.증감식
}while(i>10); //2.조건식 /*i는 1만 출력된다 이유는 조건식이 거짓이 되므로 실행이 멈추기 때문.*/
}
}

4. 중첩반복문 예제(예제3-4 소스코드, 결과)
package exam;
import java.util.Scanner;
public class ForSample {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i = 1 ; i < 10 ; i++){
for(int j=1 ; j<10 ; j++){
System.out.print(i + "*" + j + "=" + i*j);
System.out.print('\t');
}
System.out.println();
}
}
}
5. 반복문 + contnue문, break문 예제
package exam;
import java.util.Scanner;
public class ForSample {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("정수를 5개 입력하세요.");
int i;
int sum = 0;
for(i=0 ; i<5 ; i++)
{
int n = sc.nextInt();
if (n<=0) continue;
else sum += n;
}
System.out.println("양수의 합은 " + sum);
sc.close();
}
}

continue는 해당하는 조건에 부합되면 다음 단계로 넘어가고
package exam;
import java.util.Scanner;
public class ForSample {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("정수를 5개 입력하세요.");
int i;
int sum = 0;
for(i=0 ; i<5 ; i++)
{
int n = sc.nextInt();
if (n<=0) break;
else sum += n;
}
System.out.println("양수의 합은 " + sum);
sc.close();
}
}

break는 조건에 해당하면 반복문 자체를 빠져 나와 버리기 때문에 차이가 생긴다.
6. 배열 사용방법
1. 선언할때에는 배열의 크기를 지정하지 않는다.
2. 생성할때에는 new를 사용하여 복사하여 사용한다.
public class exArray1 {
public static void main(String[] args){
int intArray[]; //1.배열선언
intArray = new int[5]; //2.배열생성
int intArray1[] = new int[6]; //배열선언+생성 동시에 할 수 있다.
int intArray2[] = {1,2,3,4,5}; //배열을 초기화하면서 선언
int size = intArray2.length;
for(int k: intArray2)
//for~each문으로 배열 원소를 순서대로 읽어올수있음.
System.out.println(k);
for(int i=0;i<size;i++){
System.out.println("배열의 원소는 " + intArray2[i]);
}
}

7. 배열 사용예제
(1)합계,평균함수정의
package exArray;
public class exArray1 {
public static void main(String[] args){
int intArray[]; //1.배열선언
intArray = new int[5]; //2.배열생성
int intArray1[] = new int[6]; //배열선언+생성 동시에 할 수 있다.
int intArray2[] = {2,2,3,4,5}; //배열을 초기화하면서 선언
int size = intArray2.length;
for(int k: intArray2)
//for~each문으로 배열 원소를 순서대로 읽어올수있음.
System.out.println(k);
int n = sum(intArray2); //1. 배열함수 정의
System.out.println("합계는 : " + n);
double avg = avg(intArray2);
System.out.println("평균은 : " + avg);
/*for(int i=0;i<size;i++){
System.out.println("배열의 원소는 " + intArray2[i]);
}*/
}
private static double avg(int[] intArray2) {
double avg=0;
int sum=0;
for(int k : intArray2)
{
sum+=k;
avg = (double)sum/(double)intArray2.length;
}
return avg;
}
private static int sum(int[] intArray2) {
int sum=0;
for(int k : intArray2)
sum+=k;
return sum;
}
}

8. 2차원 배열예제 (소스, 결과, 주석)
package exArray;
public class ScoreAverage {
public static void main(String[] args) {
double score[][] =
{ //행단위로 열의 값을 나열해서 사용
{3.3,3.4}, //1학년 1, 2학기 평점
{3.5,3.6}, //2학년 1, 2학기 평점
{3.7,4.0}, //3학년 1, 2학기 평점
{4.1,4.2} //4학년 1, 2학기 평점
};
double sum = 0;
/*이중 for문 year 0행 에서 term의 1열 2열 실행됨
바깥쪽의 for문의 1행이 고정되어 있을때 안쪽의 for문이 반복 실행됨.*/
for(int year=0;year<score.length;year++) //각 학년별로 반복
for(int term=0;term<score[year].length;term++) //각 학년의 학기별로 반복
sum += score[year][term]; // 전체 평점 합
int n = score.length; //배열의 행 개수, 4
int m = score[0].length; //배열의 열 개수, 2
System.out.println("4년 전체 평점 평균은 " + sum/(n*m));
}
}

9. 예외처리
개념 : 프로그램 실행 중 오동작이나 결과에 악영향을 미치는 예상치 못한 상황 발생을 예외라고 하고 이 예외를 처리하는 과정
형식 : try{예외가 발생할 가능성이 있는 실행문} catch(처리할 예외 타입 선언){예외 처리문} finally(예외 발생 여부와 상관없이 무조건 실행되는 문장) (finally 블록은 생략이 가능하다).
(1) 0으로 나눈 예외처리 예제(소스, 결과, 주석) 표3-1 예외 내용 참고
package example;
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(); // 나눗수 입력
try{
System.out.println(dividend+"를 " + divisor + "로 나누면 몫은 "
+ dividend/divisor + "입니다.");
}
catch(ArithmeticException e){
System.out.println("0으로 나눌 수 없습니다.");
}
finally{
scanner.close();
}
}
}

예외 발생 타입(예외 클래스) 가 ArithmeticException인 경우 정수를 0 으로 나눌 때 발생함.
(2) 입력 오류를 처리하는 예제(소스, 결과, 주석) 표3-1 예외 내용 참고
package example;
import java.util.InputMismatchException;
import java.util.Scanner;
public class ex2 {
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 a){
System.out.println("정수가 아닙니다. 다시 입력하세요");
scanner.next();
i--;
continue;
}
sum+=n;
}
System.out.println("합은 " + sum);
scanner.close();
}
}
예외 발생 타입(예외 클래스) 가 InputMismatchException인 경우 Scanner 클래스의 nextInt()를 호출하여 정수로 입력받고자 하였으나 사용자가 정수가 아닌 다른 문자를 입력한 경우 발생한다.