for(초기문; 조건식; 반복 후 작업(카운트)){
작업문
}
for vs while
public class For {
public static void main(String[] args) {
System.out.println("\n-------for문--------\n");
for (int i=0; i<10; i++){
System.out.println(i);
}
System.out.println("\n-------while문--------\n");
int count=0;
while(count<10){
System.out.println(count);
count++;
}
}
}
for문과 while문과 차이점
1.초기화 변수와 초기화 변수 카운트를 for문의 설정 부분에 입력
2.초기화 변수가 for문의 설정 부분에 입력되면서 for문의 지역변수로 사용되어 같은 이름의 변수를 계속 사용할 수 있다.
3.초기화 변수 카운트가 항상 마지막에 동작함.(for문의 공식)
4. while은 기존 변수명 재사용 불가하다. 기존의 변수를 재활용하고 저장된 값을 초기화하여 사용해야 함.
System.out.println("\n-------while문--------\n");
int count=0;
while(count<10){
System.out.println(count);
count++; //while은 내부에 있다. 위치에 따라 값이 달라짐.
}
int count=0; 동일한 이름의 변수를 선언할 수 없음.
while(count<10){
System.out.println(count);
count++;
}
문제 1) 아래의 while문을 for문으로 변환하여 출력하세요.
int hit=0;
while(hit<100){
hit++;
System.out.println("나무를"+hit+"번 찍었습니다.");
if(hit==100){
System.out.println("나무가 넘어갑니다.");
}
}
int i=0;
for( i=1; i<11; i++){
System.out.println("나무를"+i+"번 찍었습니다.");
}
if(i==10){
System.out.println("나무가 넘어갑니다.");
}
문제2) 원하는 단수의 구구단을 출력하는 프로그램을 for문 사용하여 출력
System.out.println("원하는 단의 구구단을 말하시오");
Scanner scanner=new Scanner(System.in);
int dan = scanner.nextInt();
int j;
int total;
for(j=1; j<10; j++){
total=dan*j;
System.out.println(dan+"*"+j+"="+total);
}
String star ="";
for(int s=0; s<5; s++){
star +="*";
System.out.println(star);
}
for(int i=2; i<10; i++ ){
System.out.println("--------"+i+"단------");
for(int j=1; j<10; j++){
System.out.println(i+"*"+j+"="+(i*j));
}
}
break: 반복문 내에서 break만나면 해당 반복문 즉시 중단
break문을 주로 많이 사용된다.
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
System.out.println("for문 사용시 현재 i의 값 :" + i);
}
System.out.println("\n------continue------\n");
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue;
}
System.out.println("for문 사용시 현재 i의 값 :" + i);
}
문제4) 구구단 전체를 출력하는 프로그램을 작성하세요.
조건1)사용자 입력을 받고 사용자 입력으로 2~9까지의 숫자를 입력받고 해당하는
단수의 구구단을 출력
조건2) 사용자 입력으로 받은 단수에 break와 continue를 사용하여 구구단 작성
Scanner scanner = new Scanner(System.in);
System.out.println("숫자를 입력해주세요");
int num1=scanner.nextInt();
for(int i=2; i<10; i++){
if(i==num1){
break;
}
System.out.println("\n------"+i+"단-------\n");
for(int j=1; j<10; j++){
System.out.println(i + "*" + j + "=" + (i * j));
}
}
for(int i=2; i<10; i++){
if(i==num1){
continue;
}
System.out.println("\n------"+i+"단-------\n");
for(int j=1; j<10; j++){
System.out.println(i + "*" + j + "=" + (i * j));
}
사용법 :
선언 : 1) 데이터타입 배열명 [] = new 데이터타입[크기];
2) 데이터 타입 배열명[]; 배열명= new 데이터타입[크기];
3) 데이터 타입 배열명 []={데이터1, 데이터2, 데이터3, ,,,};
사용 : 1.배열명[index]; //지정한 index에 있는 데이터를 가져옴.
2.배열명[index]=데이터; // 지정한 index에 데이터를 저장.
빈 배열 선언, 메모리 상에 array1이란 빈 배열을 등록, 해당 배열을 사용 시
반드시 초기화 작업을 해야 한다
int arrray1[];
// System.out.println(arrray1); 초기화하지 않은 배열 사용시 오류
arrray1 = new int[5]; // 배열을 초기화함.
System.out.println("배열 array1의 메모리주소: " + arrray1); //초기화하니까 출력됨.[I@43a25848-메모리주소 데이터 없으니까 데이터는 안나옴.
System.out.println("배열 array1의 index 0의 값: " + arrray1[0]);
arrray1[2] = 10;
System.out.println("배열 array1의 index 2의 값: " + arrray1[2]);
System.out.println("배열 array1의 index 4의 값: " + arrray1[4]); //이래도 0으로 출력됨
// System.out.println("배열 array1의 index 4의 값: "+arrray1[5]); 지정된 크기 이상의 index에 접근 시 오류발생.
System.out.println("배열 array1의 길이: " + arrray1.length); //해당 배열의 길이 알려줌
int arrray2[] = new int[5];
System.out.println("배열 array2의 메모리주소: " + arrray2);
System.out.println("배열 array2의 index 0의 값: " + arrray2[0]);
arrray2[2] = 20;
System.out.println("배열 array1의 index 2의 값: " + arrray2[2]);
System.out.println("배열 array2의 index 4의 값: " + arrray2[4]);
System.out.println("배열 array2의 길이: " + arrray2.length);
int array3[] = {10, 20, 30, 40, 50}; //{}안의 값만큼 길이가 자동으로 정해진다.
System.out.println("배열 array3의 메모리주소: " + array3);
System.out.println("배열 array3의 index 0의 값: " + array3[0]);
array3[2] = 300;
System.out.println("배열 array3의 index 2의 값: " + array3[2]);
System.out.println("배열 array3의 index 4의 값: " + array3[4]);
System.out.println("배열 array3의 길이: " + array3.length);
int array4[];
array4={10,20,30,40,50}; //반드시 선언과 동시에 사용해야 한다. 오류발생, 무조건 new를 사용해야한다.
아래처럼 해야한다.
배열을 먼저 선언한고 데이터를 나중에 입력하는 1번 형식으로 배열을 선언 시
3번 형식의 데이터 입력은 불가능함.
array4=new int[5]; //무조건 new사용해야 한다.
array4[0]=10;
array4[1]=20;
array4[2]=30;
array4[3]=40;
array4[4]=50;
// 문제5) int 타입의 변수 intArray를 생성하고 크기를 10으로 설정한 후 각 index에 1-10까지의 데이터를 입력하고
// 저장된 데이터를 출력하세요.
int intArray[] = {1, 2, 3, 4, 5,6,7,8,9,10};
System.out.println(intArray[0]);
System.out.println(intArray[1]);
System.out.println(intArray[2]);
System.out.println(intArray[3]);
System.out.println(intArray[4]);
System.out.println(intArray[4]);
System.out.println(intArray[6]);
System.out.println(intArray[7]);
System.out.println(intArray[8]);
System.out.println(intArray[9]);
System.out.println(intArray[0]);
System.out.println(intArray[1]);
System.out.println(intArray[2]);
System.out.println(intArray[3]);
System.out.println(intArray[4]);
System.out.println(intArray[4]);
System.out.println(intArray[6]);
System.out.println(intArray[7]);
System.out.println(intArray[8]);
System.out.println(intArray[9]);
문제6) 문제 5의 intArray에 저장된 값을 모두 합하는 프로그램을 작성하세요
System.out.println(intArray[0]+ intArray[1]+intArray[2]+intArray[3]+intArray[4]+intArray[5]+intArray[6]+
intArray[7]+intArray[8]+intArray[9]);
int total=0;
total = intArray[0]+ intArray[1]+intArray[2]+intArray[3]+intArray[4]+intArray[5]+intArray[6]+
intArray[7]+intArray[8]+intArray[9];
System.out.println(total);
레퍼런스는 주소를 저장하고 있다.
int a=10;
int b=20;
// 변수 a의 값을 변수 b에 복사하여 넘겨줌.
System.out.println("변수 a의 값: "+a+"+"+"\t변수 b의 값: "+b);
b=a;
System.out.println("변수 a의 값: "+a+"\t변수 b의 값: "+b);
// 변수a의 값을 변경해도 변수 b의 값은 그대로 남아있음. 값을 복사해서 넘겨줬기 때문
a=100;
System.out.println("변수 a의 값: "+a+"\t변수 b의 값: "+b);
System.out.println();
int arr1[]={100};
int arr2[]={200};
System.out.println("배열 arr1의 주소: "+arr1+"\t배열 arr2의 주소: "+arr2);
System.out.println("배열 arr1[0]의 주소: "+arr1[0]+"\t배열 arr2의 주소: "+arr2[0]);
arr2=arr1; //arr1과 arr2의 주소가 동일해짐. 주소를 복사했기 때문
System.out.println("배열 arr1의 주소: "+arr1+"\t배열 arr2의 주소: "+arr2);
System.out.println("배열 arr1[0]의 주소: "+arr1[0]+"\t배열 arr2의 주소: "+arr2[0]);
arr1[0]=2000;
System.out.println("배열 arr1의 주소: "+arr1+"\t배열 arr2의 주소: "+arr2);
System.out.println("배열 arr1[0]의 주소: "+arr1[0]+"\t배열 arr2의 주소: "+arr2[0]);
배열의 주소가 달랐지만 arr2=arr1;해줌으로 둘의 주소가 동일해진다.
// p.106 배열 선언 및 생성
int arrayInt[]; //배열선언
arrayInt=new int[5]; //배열 크기 설정
int max= 0; //현재 가장 큰 수를 저장하기 위한 변수
System.out.println("양수 5개를 입력하세요");
Scanner scanner =new Scanner(System.in);
for(int i=0; i<5; i++){
// 사용자 입력을 통해 얻은 데이터를 배열에 저장
arrayInt[i]= scanner.nextInt(); //i번째 . 사용자가 입력한 걸 대입
// 배열에 저장된 데이터를 max와 비교
if(arrayInt[i]>max){ //max값과 비교.
// max에 배열에 저장된 값을 저장
max=arrayInt[i]; //결국 가장 큰 값이 max에 들어감.
}
}
System.out.println("가장 큰 수는 "+max+"입니다.");
}
배열의 크기 선언할 때 변수를 사용하면 안된다. 오류가 날 수 있다.
그렇지만 상수는 괜찮다.
배열의 index접근에는 변수를 사용하는 것이 가능.
/ int c=5;
// arrayInt=new int[c];
배열이나 나열의 원소를 순차 접근하는데 유용한 for문.
이 두가지 반드시 알고 있어야 한다!!!
for (변수:배열레퍼런스) {
반복작업문
}System.out.println("\n-----기존 for문 사용한 배열의 데이터 출력-----\n");
int arrNum1[] = {10,20,30,40,50};
// int total1=0;
for(int i=0; i<arrNum1.length; i++){ //반복 조건을 사용자가 지정.
System.out.println("arrNum1["+i+"]: "+arrNum1[i]);
// total1+=arrNum1[i];
// System.out.println("total1: "+total1);
}
System.out.println("\n-----for~each 사용한 배열의 데이터 출력-----\n");
int arrNum2[]={10,20,30,40,50};
for(int num: arrNum2){ //반복 가능한 객체의 크기만큼 반복동작(arrNum2의 크기만큼) 무조건 처음부터 끝까지 동작
System.out.println("num: "+num);
}
![](https://velog.velcdn.com/images/dbfl1443/post/0d096b01-94b9-408c-aa18-d7cdebe423cb/image.png)
```java
// p.109 for each문 활용
int [] n ={1,2,3,4,5};
int sum=0;
for(int k :n){
System.out.println(k+"");
sum+=k;
}
System.out.println("합은 "+sum);
String f[]={"사과","배","바나나","체리","딸기","포도"};
for (String s:f)
System.out.println(s+"");
}
int arr1[]={1,2,3,4,5};
int arr2[][]={ //앞에는 줄, 뒤에는 칸
{1,2,3},
{4,5,6}
};
int arr3[][][]={{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}}};
int numArr[][]={
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15},
{16,17,18,19,20},
{21,22,23,24,25}
};
System.out.println("numArr[4][1] : "+numArr[4][1]); //22
System.out.println("numArr[1][4] : "+numArr[1][4]); //10
```java
System.out.println(test[0]+" "+test[1]+" "+test[2]+" "+test[3]+" "+test[4]+"");
반복문을 사용하여 2차원 데이터를 출력하려면 2중 반복문을 사용해야 함.
for (int i=0; i<5; i++){ //열
// System.out.println(numArr[i]); //이러면 주소가 5개 나옴.
for(int j=0; j<5; j++){ //칸
System.out.print(numArr[i][j]+" ");
}
}
System.out.println();
for (int item[] : numArr){
for (int i : item){
System.out.print(i+" ");
}
}
System.out.println();
for(int item[]:numArr){
for (int i=0; i<item.length; i++){
System.out.print(item[i]+ " ");
}
}
System.out.println();
for (int i=0; i<numArr.length; i++){
for(int item:numArr[i]){
System.out.print(item+" ");
}
}
2차원배열 가져오기
int numArr2[][]={
{1,2,3},
{4,5,6,7},
{8,9,10,11,12},
{13,14}
};
System.out.println();
System.out.println(numArr2[3][1]); //14
System.out.println(numArr2[2][4]); //12
for (int i=0; i<numArr2.length; i++){
for(int j=0; j< numArr2[i].length; j++){
System.out.println(numArr2[i][j]+" ");
}
}
for(int items[]: numArr2){
for(int item:items){
System.out.println(item+" ");
}
}
}