클라우드 융합 Full-stack 웹 개발자 양성과정/Java

프로그래밍 언어응용-while-do, while-break, continue, Array

thesunset 2022. 9. 25. 13:50

# C_Dowhile

package com.kh.chap02.loop;

public class C_Dowhile {

/*

* do-whlie문

* 별도의 조건검사없이 무조건 1회는 실행!

* 조건이 맞지 않더라도 한 번은 수행

*

* [표현법]

* 초기식; //필수는 아님

*

* do {

*

* System.out.println("한번은 무조건 출력");

* 증감식;//필수는 아님

*

* } while(조건식);

*

* while문은 처음 수행할 때도 조건식 검사 후 true여야 실행

* do-while은 첫 실행은 별도의 조건검사 없이 무조건 한 번 실행!

* While(false)

*/

public void method1() {

int num = 1;//초기식

//애초에 조건이 맞지 않아도 무조건!!! 한번은 실행

do {//do실행후 whlie문으로 가서 조건이 true면 여기로 옴

System.out.println("무조건 한 번은 시도");

} while (num==0);

}

}


# A_Break

package com.kh.chap3;

import java.util.Scanner;

public class A_Break {

/*

* break : break문을 만나는 순간 "가장 가까운 반복문"을 빠져나간다.

* 해당 break문이 속해있는 반복문 "한겹"만 빠져나감

*

* *주의할 점 : switch문 안에 break;와 다른 개념

* switch문 내부에 있는 break는 해당 switch문을 빠져나가는 용도일뿐.

*/

public void method1() {

//매 번 반복적으로 새롭게 랜덤값(1~100)을 생성해서 출력 => 무한하게

//1. for(;;)

//2. while(true)

//반복문을 돌다가 생성된 랜덤값이 홀수일 경우 반복문을 빠져나가게 할 것!

for(;;) { //for문 시작

int random = (int)(Math.random() * 100) +1;

if (random %2 ==1) {

System.out.println("반복문 탈출");

break; //반복문의 끝으로 빠져나감

}

System.out.println(random);

} //for문 끝

}

public void method2() {

//매번 사용자에게 문자열을 입력받은 후

//해당 문자열의 길이를 출력하자!

//단, 사용자가 "exit"을 입력할 경우 반복문을 빠져나가게 해주자.

Scanner sc = new Scanner(System.in);

while(true) {

System.out.println("문자열을 입력해주세요> ");

String str = sc.nextLine();

if(str.equals("exit")) {

break; //나랑 제일 가까운 반복문을 빠져나감

}

System.out.println(str.length());

}

}

/*

* 1. 사용자로부터 한 개의 값을 입력받아 1부터 그 숫자까지의 모든 숫자를 거꾸로 출력하세요.

* 단, 입력한 수는 1보다 크거나 같아야 합니다.

* 1미만의 숫자가 입력됐다면 "1이상의 숫자를 입력하세요."가 출력되면서 다시 사용자에게 입력받도록하세요.

*

* ex)

*

* 1이상의 숫자를 입력하세요:4

* 4 3 2 1

* 1이상의 숫자를 입력하세요:0

* 1이상의 숫자를 입력해주세요.

* 1이상의 숫자를 입력하세요:

*

*/

public void method3() {

Scanner sc = new Scanner(System.in);

int num;

do {

System.out.println("1이상 숫자를 입력하세요:");

num = sc.nextInt();

} while (num<1);

for (;num > 0; num--) { //제어변수 썼던거 사용하므로 따로 지정하지 않음.

System.out.println(num+" ");

}

}

/*

* 사용자로부터 시작 숫자와 공차를 입력받아

* 일정한 값으로 숫자가 커지거나 작아지는 프로그램을 만들어보기

* 단, 출력되는 숫자는 총 10개입니다.

* *공차는 숫자들 사이에 일정한 숫자의 차가 존재하는 것을 말한다.

*

* 시작 숫자: 4

* 공차: 3

* 4 7 10 13 16 19 22 15 28 31

*

*

*/

public void method4() {

//첫 출력:시작숫자

//두번째 출력: 시작숫자와 공차를 더한 sum

//세번째 출력: sum += gongcha

//네번째 출력: sum에 공차를 더한 sum

Scanner sc = new Scanner(System.in);

System.out.println("시작숫자를 입력해주세요.>");

int num = sc.nextInt();

System.out.println("공차를 입력해주세요.>");

int gongcha = sc.nextInt();

int sum = num;

String str = "";

for(int a = 1; a<=9; a++) {

sum += gongcha;

str += sum + " ";

}

System.out.println(num + " " + str); //쉬운방법

//어려운방법

//사용자가 입력한 값: x

//공차: y

//x+y^2

for (int i = 0; i<10; i++) {

System.out.printf("%d", num + (gongcha*i));

}

}

// 매번 사용자로부터 숫자를 입력받고

// 해당 숫자가 음수면, "프로그램을 종료합니다"라는 문구를 출력하고 종료시켜보세요.

public void method5() {

Scanner sc = new Scanner(System.in);

while(true) {

System.out.println("숫자를 입력해주세요.>");

int num = sc.nextInt();

if(num<0) {

System.out.println("프로그램을 종료합니다.");

break;//또는 return;

}

}

}

}


# B_continue

package com.kh.chap03;

import java.util.Arrays;

import java.util.Scanner;

public class B_continue {

/*

* continue : 반복문 안에서 쓰이는 구문(break 친구)

*

* continue를 만나면 그 뒤에 어떤 구문이 있던지 실행하지 않고 pass

* 가장 가까운 반복문으로 올라가라는 것을 의미함.

*

*

*

*

*

*/

//방법1. 반복문을 1씩 증가시키면서 돌리는데, 홀수일 경우만 출력하도록 조건문을 사용한다.

//if (i%2==1) System.out.println(i);

//방법2. 증감식을 매번 2씩 증가시키면 됨.

//for(int i = 1; i<=10; i+=2)

//방법3. continue사용

public void method1() {

for (int i = 1; i <=10; i++) {

//1부터 10까지 홀수만 출력

//1 3 5 7 9

if(i%2==0) {

continue;

}

System.out.println(i + " "); //1 2 3 4 5 6 7 8 9 10

}//continue를 만나면 sout를 만나지 않고 이곳으로 와 for문을 반복함.(이어서 할건지)

//break는 반복하지 않고 끝냄.

}

public void method2() {

//조건 1, 1부터 100까지의 총 합계를 구해서 출력

//조건 2, 단, 7의 배수값만 빼고 더하기

/* 조건1

int sum = 0;

for (int i = 1; i<=100; i++) {

sum += i;

}

System.out.println("합계: " + sum);

*/

//조건 2포함

int sum = 0;

for (int i = 1; i<=100; i++) {

if(i%7==0) {

continue;

}else {

sum += i;

}

}

System.out.println("합계: " + sum);

}

public void method3() {

//3칸짜리 정수 배열을 만들고 숫자 입력받기

//int[] arr = new int[3];

// 1~100까지의 숫자만 입력받기

//만약에 범위를 넘어서 숫자를 입력한다면, "다시입력하세요"라고 출력한 뒤 다시 입력받기

int[] arr = new int[3];

Scanner sc = new Scanner(System.in);

for(int i = 0; i<arr.length; i++) {

System.out.println("숫자를 입력해주세요:");

int temp = sc.nextInt();

if (0 >= temp || 100 < temp ) {

System.out.println("다시 입력하세요.");

i--; //i++하기 전 i를 미리 감소시켜줌. > 잘못입력한 값을 원상태로 돌려주기

continue;

}

arr[i] = temp;

}

System.out.println(Arrays.toString(arr));

}

}

package com.kh.array;

import java.util.Arrays;

import java.util.Scanner;

public class A_Array {

//변수(Varriable)

//메모리(RAM)에 데이터값을 저장하기 위한 공간

// 변수: 하나의 공간에 하나의 값만 담을 수 있음.

//1.값이 바뀔 수 있다.

//2.크기가 정해져있다.

//3.형변환이 가능하다.

//4. stack메모리 -> 기본자료형

//5. 코드블록 안에서 선언되고 사용된다.

//6. 연산이 가능하다

//7. 초기화는 한 번만 가능하다.

//8. 자료형이 지정되어있다.

//9. 식별자를 붙여서 사용한다.

//10. 공간이 하나다. => 하나의 값만 저장이 가능하다.*****

//11. 참조형은 주소값을 저장한다.

// 배열 (Array): 하나의 공간에 여러개의 값을 담을 수 있음

// 단, "같은 자료형의 값들"이여야 함.

// => 배열의 각 인덱스 자리에 실제 값이 담김 *** 인덱스는 "0"부터 시작함.

public void method1() {

//배열 왜 써야할까?

//변수만 이용해서 프로그래밍을 하면?

//값이 늘어날 떄마다 변수를 만들어서 기록을 하고 싶음.

// ctrl + / 주석 처리

/*

int num1 = 1;

int num2 = 2;

int num3 = 4;

int num4 = 7;

int num5 = 11;

System.out.println(num1);

System.out.println(num2);

System.out.println(num3);

System.out.println(num4);

System.out.println(num5);

int sum = 0;

for (int i = 1; i <= 5; i++ ) {

//sum += numi

}

//sum = num1 + num2 + num3 + num4 + num5; // 하나하나 다 더해줌 하지만 10000개가된다면?

//해결: 배열 => 반복문 사용 가능!

*/

//1. 배열 선언

/*

* 변수의 경우엔?

* 자료형 변수식별자;

*

* 배열 선언법

* 1) 자료형 배열식별자[];

* 2) 자료형[] 배열식별자;=> 주로 사용

*/

/*

int a;//변수 선언!

int arr1[]; // 1번 방법으로 int형 배열을 선언!

int[] arr2; // 2번 방법으로 int형 배열을 선언!

*/

//2. 배열 할당

/*

* 이 배열에 몇 개의 값이 들어갈지 배열의 크기를 정해주는 과정

* 지정한 갯수만큼 값이 들어갈 공간이 만들어짐.

*

* [표현법]

* int[] arr; //정수형 배열 arr이라고 읽음

* arr = new int[5]; //5칸짜리로 할당이 됨.

* int[] arr2 = new int[5]; // 선언과 동시에 할당.

*

* heap에 int를 넣을 수 있는 5개의 공간이 생김

* 배열은 참조형

* 참조형 : new

*

*/

int[] arr1;

arr1 = new int[15];

int[] arr2 = new int[5];

// 3. 배열의 각 인덱스에 값 대입

/*

*[표현법]

*배열이름[인덱스] = 값; //0부터 시작

*/

arr2[0] = 1;

arr2[1] = 2;

arr2[2] = 4;

arr2[3] = 7;

arr2[4] = 11;

System.out.println(arr2[0]);

System.out.println(arr2[1]);

System.out.println(arr2[2]);

System.out.println(arr2[3]);

System.out.println(arr2[4]);

//변수랑 차이가 없네?

int sum = 0;

for (int i = 0; i<arr2.length; i++) {

//System.out.println(arr2[i]);

sum += arr2[i];

System.out.println(sum); //합계도 가능!

}

//배열의 가장 큰 장점: 반복문을 사용 가능

}

public void method2() {

//String형 배열

//1. 배열의 선언과 할당 names 30칸짜리

String[] names = new String[30];

//2. 배열의 인덱스에 값을 입력

names[0] = "강매*";

names[1] = "강정*";

names[2] = "고예*";

names[3] = "김광*";

names[4] = "김동*";

names[5] = "김세*";

names[6] = "김승*";

names[7] = "김휘*";

names[8] = "박세*";

names[9] = "박승*";

names[10] = "박유*";

names[11] = "박혜*";

names[12] = "서지*";

names[13] = "송누*";

names[14] = "신경*";

names[15] = "오주*";

names[16] = "유인*";

names[17] = "이상*";

names[18] = "이연*";

names[19] = "이영*";

names[20] = "이유*";

names[21] = "이충*";

names[22] = "이한*";

names[23] = "임선*";

names[24] = "주성*";

names[25] = "주승*";

names[26] = "최정*";

names[27] = "황대*";

names[28] = "황승*";

names[29] = "임수*";

 

//names[100] = "이승*";//문법적으론 맞게 잘 썼지만, 인덱스의 길이 바깥에 있음.

//ArrayIndexOutBound : 100 <= 이유

//배열의 인덱스 범위를 벗어났다

//at com.kh.array.A_Array.method2(A_Array.java:166)<=여기서 인덱스 범위 벗어났음을 알려줌

 

System.out.println("name배열의 크기: " + names.length);

 

 

for(int i = 0; i<=names.length/*==정수형 30*/-1; i++) {

//배열의 크기는 30으로 할당했기 떄문에 0부터 names.length는 30 즉 31개가 됨 => 30번째 인덱스를 찾는 오류발생

System.out.printf("출석번호: %d번 %s \n",i+1,names[i]); //문법적으로는 맞게 씀

 

}

}

public void method3() {

//int형 배열을 선언하고

//다섯칸을 할당하고

//임의의 정수 다섯개를 대입하여

//반복문을 이용해 합계 출력하기

int[] arr = new int[5];

arr[0] = 5;

arr[1] = 15;

arr[2] = 439634;

arr[3] = 54545;

arr[4] = 3434;

int sum=0;

for(int i = 0; i<=arr.length-1; i++) {

sum += arr[i];

}

System.out.println(sum);

}

public void method4() {

//1.사용자로부터 입력을 통해 배열에 값을 담기

//다섯칸 짜리로(정수)

int[] nums = new int[5];

Scanner sc = new Scanner(System.in);

for(int i =0; i<nums.length; i++) {

System.out.println("정수를 입력해주세요.>");

nums[i] = sc.nextInt();

System.out.println("nums라는 배열의" + i + "번째 인덱스에 들어가는 값" + nums[i]);

}

//System.out.println(Arrays.toString(nums));

//2.해당배열에서 가장 작은값 , 즉 최소값을 구하는 기능을 만들어보자.

int min =nums[0];

for(int i = 0; i<nums.length; i++) {

if(nums[i]<min) {

min=nums[i];

}

}

System.out.println("최소값: " + min);

}

}

+

* 배열을 선언하면, new(참조변수)로 heap 영역에 인덱스 영역을 만들고, 주소를 갖게됨. stack영역에는 값이 저장되는 것이 아닌, 호출하게 되면 stack이 가르키는 heap영역으로 가 값을 조회,변경, 입력 할 수 있는 것.