// for문의 구성
for(초기문; 조건식; 반복후작업) {
...작업문..
}
// 예시 1 : i가 0~9까지 10번 반복
for(i=0; i<10; i++){
System.out.print(i);
}
// 예시 2 : 반복문에 변수 선언 가능
for(int i=0; i<10; i++) {
System.out.print(i);
}
// 예시 3 : 0에서 100까지 합 구하기
int sum = 0;
for(int i=0; i<10; i++) {
sum += i;
}
System.out.print(sum);
// 반복조건이 true이면 무한 반복
for(초기작업; true; 반복후작업) {
...
}
// 비어있어도 true로 간주 무한반복
for(초기작업; ; 반복후작업) {
...
}
// 반복후 작업을 , 로 구분할 수 있음
for(int i=0; i<10; i++, System.out.print(i)) {
...
}
package test;
public class ForSample {
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum = 0;
for(int i=1; i<=10; i++) {
sum += i;
System.out.print(i);
if(i<=9) { // 9보다 작거나 같으면 + 기호 출력
System.out.print("+");
} else { // 10이되면 = 을 찍고, 누적된 값 sum을 출력
System.out.print("=");
System.out.print(sum);
}
}
}
}
//결과 : 1+2+3+4+5+6+7+8+9+10=55
// while 문의 구성
while (조건식) {
..작업문..
}
//
int i = 0;
while(i<10) {
System.out.print(i);
i++;
}
package test;
import java.util.Scanner;
public class WhileSample {
public static void main(String[] args) {
// TODO Auto-generated method stub
int count =0;
int sum = 0;
Scanner sc = new Scanner(System.in);
System.out.println("정수를 입력하고 마지막에 -1을 입력하세요.");
int n = sc.nextInt();
while(n!= -1) {
sum += n;
count++;
n = sc.nextInt();
}
if(count == 0) System.out.println("입력된 수가 없습니다.");
else {
System.out.println("정수의 개수는" + count + " 개 이며");
System.out.println("평균값은 " + (double)sum/count + "입니다");
}
}
}
/*
결과 :
정수를 입력하고 마지막에 -1을 입력하세요.
30 45 60 -1
정수의 개수는3 개 이며
평균값은 45.0입니다
*/
조건식이 true이든 false이든 상관없이
중괄호({ }) 안의 문장을 무조건 한번 실행시킨 후 조건을 검사하여 반복을 결정
// do-while문의 구성
do {
..작업문..
} while(조건식);
// do-while문 예시
int i = 0;
do {
System.out.print(i);
i++
}while(i <= 10);
// 결과 : 0123456789
조건식에 관계 없이 무조건 한번 실행시킨다고 했는데 한번 알아보자
int i = 0;
do {
System.out.print("do-while문 테스트!");
i++
}while(i < 1); // 조건이 충족되지 않음.
// 결과 : do-while문 테스트!
조건식을 만족하지 못해도 일단 중괄호({ }) 안에 문장을 무조건 한번 실행하는 것을 볼 수 있다."
package test;
public class DoWhileSample {
public static void main(String[] args) {
// TODO Auto-generated method stub
char c = 'A';
int count = 0;
do {
System.out.print(c);
c = (char) (c + 1); // C + 1을 해버리면 정수값으로 바뀌기 때문에 괄호를 씌운 후, 형변환 해줘야함
count++;
} while(c <= 'Z');
System.out.println();
System.out.println("알파벳의 개수는" + count + "개 입니다.");
}
}
/* 결과 :
ABCDEFGHIJKLMNOPQRSTUVWXYZ
알파벳의 개수는26개 입니다.
*/
반복문이 다른 반복문을 내포하는 구조
다음은 1000명의 학생이 있는 100개의 대학의 모든 학생의 성적의 합을 구하는,
for문을 이용한 이중 중첩 구조이다.
for(int i=0; i<100; i++) { // 100개의 학교 성적을 모두 더한다
...
for(int j=0; j<1000; j++) { // 각 학교에 해당하는 1000명의 학생 성적을 모두 더한다.
...
...
}
...
}
반복문을 빠져 나가지 않으면서 다음 반복으로 진행
for(초기문; 조건식; 반복후 작업) {
........
continue;
........
}
while(조건식) {
........
continue;
........
}
do {
........
continue;
........
}while(조건식);
10번 반복, 입력되는 정수의 값이 홀수면 더하고, 짝수면 skip,
홀수 입력의 횟수와 더한 값을 출력하세요.
package test;
import java.util.Scanner;
public class ContinueExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("정수를 10개 입력하세요");
int sum = 0;
int count = 0;
for(int i=0; i<10; i++) {
int n = sc.nextInt();
if(n%2 == 0) {
continue;
} else {
sum += n;
count++;
}
}
System.out.println("전체 홀수 입력의 횟수 : " + count);
System.out.println("더한 값 출력 : " + sum);
}
}
/* 결과 :
정수를 10개 입력하세요
10 -10 20 -20 30 -30 40 -40 5 50
전체 홀수 입력의 횟수 : 1
더한 값 출력 : 5
*/
반복문 하나를 완전히 빠져 나갈 때 사용
// break문 구성
for(초기문; 조건식; 반복 후 작업) {
.....
break;
.....
}
// 이중 중첩에서의 break문
for(초기문; 조건식; 반복 후 작업) {
while(조건식) {
.....
break; // while문에서만 벗어남.
.....
}
}
자바에서의 배열은 하나의 객체로 이루어졌다고 보자
객체의 return 값은 메모리주소(ref)이다
배열 선언과 배열 생성의 두 단계 필요
int intArray[]; 혹은 int[] intArray;
char charArray[] 혹은 char[] charArray;
intArray = new int[10]; 혹은 int intArray[] = new int[10];
int intArray[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 초기화된 값의 개수(10)만큼의 배열 생성
레퍼런스 변수 : 객체의 시작점 주소를 갖고 있는 변수
(1) 배열에 대한 레퍼런스 변수 intArray 선언
int intArray [];
(2) 배열 생성
intArray = new int [5];
int intArray[] = {4, 3, 2, 1, 0};
/*
intArray -> 4 intArray[0]
3 intArray[1]
2 intArray[2]
1 intArray[3]
0 intArray[4]
*/
double doubleArray[] = {0.01, 0.02, 0.03, 0.04};
/*
doubleArray -> 0.01 doubleArray[0]
0.02 doubleArray[1]
0.03 doubleArray[2]
0.04 doubleArray[3]
*/
배열 변수명과 [] 사이에 원소의 인덱스를 적어 접근
int intArray [] = new int[5]; // 원소가 5개인 배열 생성, 범위는 0~4
intArray[0] = 5;
intArray[3] = 6;
int n = intArray[3];
n = intArray[-2]; // 오류, 인덱스로 음수는 사용 불가
n = intArray[5]; // 오류, 5는 인덱스의 범위 (0~4)를 넘었음.
int intArray []; // 레퍼런스 변수만 생성
intArray[1] = 8; // 오류, 생성 되지 않은 배열을 사용
하나의 배열을 다수의 레퍼런스가 참조 가능
int intArray[] = new int[5];
int myArray[] = intArray; // 주소값을 myArray에 넣어줌.
intArray[1] = 2;
myArray[1] = 6; //기존의 2는 지워지고 새로이 6이 담긴다.
package test;
import java.util.Scanner;
public class ArrayAcess {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int intArray[] = new int[5];
int min = 10;
System.out.println("양수 5개를 입력하세요.");
for(int i=0; i<5; i++) {
intArray[i] = sc.nextInt();
if(intArray[i] < min) {
min = intArray[i];
}
}
System.out.println("가장 작은 수는 " + min + "입니다.");
}
}
/*
결과 :
양수 5개를 입력하세요.
5
6
7
15
50
가장 작은 수는 5입니다.
*/
배열은 자바에서 객체로 관리
배열 객체 내에 length 필드는 배열의 크기를 나타냄.
int intArray[];
intArray = new int[5];
int size = intArray.length;
// size는 5 값을 가진다.
배열의 length 필드를 이용하여 배열 크기만큼 정수를 입력 받고 평균을 구하는 프로그램을 작성하라
package test;
import java.util.Scanner;
public class ArrayLength {
public static void main(String[] args) {
int intArray[] = new int[7];
int sum = 0;
Scanner sc = new Scanner(System.in);
System.out.print(intArray.length + "개의 정수를 입력하세요 >>");
// 입력받은 정수를 각각의 배열 원소에 저장
for(int i=0; i<intArray.length; i++) {
intArray[i] = sc.nextInt();
}
// 변수 sum에 입력받은 정수의 합계를 저장
for(int i=0; i<intArray.length; i++) {
sum += intArray[i];
}
System.out.println("평균은 " + (double)sum/intArray.length);
sc.close();
}
}
/*
결과 :
7개의 정수를 입력하세요 >> 1 2 3 4 5 6 7
평균은 4.0
*/
배열이나 나열(enumeration)의 각 원소를 순차적으로 접근하는데 유용한 for문
첫번째 예제
int [] num = {1, 2, 3, 4, 5};
int sum = 0;
for (int k : num)
sum += k;
System.out.priintln("합은 : " + sum);
// 결과 : 합은 15
2번째 예제
String names[] \ {"사과", "배", "바나나", "체리", "딸기", "포도"};
for (String s : names)
System.out.print(s + ", ");
// 결과 : 사과, 배, 바나나, 체리, 딸기, 포도
package test;
public class foreachEx {
public static void main(String[] args) {
int [] n = {1, 2, 3, 4, 5};
String names[] = {"사과", "배", "바나나", "체리", "딸기", "포도" };
int sum = 0;
for (int k: n) {
System.out.print(k + " ");
sum += k;
}
System.out.println("합은 " + sum);
// 아래 for-each에서 s는 names[0], names[1], ... , names[5]로 반복
for (String s : names) {
System.out.print(s + " ");
}
}
}
/* 결과 :
1 2 3 4 5 합은 15
사과 배 바나나 체리 딸기 포도
*/