-
break문 / continue문 / 배열프로그래밍/JAVA 자바 2021. 7. 11.반응형
실수를 입력 받아 입력 받은 수의 합 구하기
입력 받은 수가 0 이하면 입력을 종료하고 합을 출력 후 프로그램 종료break문을 사용하면 코드가 짧아진다.
package ex0709; import java.util.Scanner; public class Ex01_break { public static void main(String[] args) { // 실수를 입력 받아 입력 받은 수의 합 구하기 // 입력 받은 수가 0 이하면 입력을 종료하고 합을 출력 후 프로그램 종료 Scanner sc = new Scanner(System.in); double input, sum; sum=0; while(true) { System.out.print("수 입력[종료:0] : "); input = sc.nextDouble(); if(input <= 0.0) { break; } sum += input; } System.out.println("결과 : "+sum); sc.close(); } }
while로 입력 받은수가 0이하인지 확인
break label문
label을 붙여두면 break문이 실행될때 라벨의 위치까지 올라가서 다 정지시킨다.
package ex0709; public class Ex02_label { public static void main(String[] args) { // break label /* for(int i=1; i<=3; i++) { for(int j=1; j<=3; j++) { if(i+j==4) { break; } System.out.println(i+ ","+j); } } */ ga: //label for(int i=1; i<=3; i++) { for(int j=1; j<=3; j++) { if(i+j==4) { break ga; } System.out.println(i+ ","+j); } } } }
break ga; << break 문이 실행 될때 ga: 의 위치로 가서 탈출해라 라는 뜻
2중 for문 이지만 ga:는 for문 맨 위에 있으므로 전체 for문이 멈추게 된다.
1.합 2.홀수합 3.짝수합 4.종료 => 1누르면 합 출력
원하는 수 입력 받기package ex0709; import java.util.Scanner; public class Ex03_break { public static void main(String[] args) { // 1.합 2.홀수합 3.짝수합 4.종료 => 1누르면 합 출력 // 원하는 수 입력 받기 Scanner sc = new Scanner(System.in); int num, s, menu; String title; int start, offset; while(true) { do { System.out.print("1.합 2.홀수합 3.짝수합 4.종료 => "); menu = sc.nextInt(); }while(menu<1 || menu>4); if(menu == 4) break; System.out.print("원하는 수 ? "); num = sc.nextInt(); switch(menu) { case 1 : title="합 : "; start=1; offset=1; break; case 2 : title="홀수합 : "; start=1; offset=2; break; default : title="짝수합 : "; start=2; offset=2; break; } s=0; for(int n=start; n<=num; n+=offset) { s+=n; } System.out.println("1~"+num+"까지"+title+s); } sc.close(); } }
continue문
5개의 실수를 입력 담아 0보다 큰 수의 합 구하기
package ex0709; import java.util.Scanner; public class Ex04_continue { public static void main(String[] args) { // 5개의 실수를 입력 담아 0보다 큰 수의 합 구하기 Scanner sc = new Scanner(System.in); double input,sum; sum=0.0; for(int i=0; i<5; i++) { System.out.print("수?"); input = sc.nextDouble(); if(input <= 0.0) { continue; } sum += input; } System.out.println("결과 : " + sum); sc.close(); } }
for문으로 i=0이 5가 될때까지 반복을 한다.
반복 하는 내용 : 수를 입력받아서 0보다 작은지 확인한다.
만약 0보다 작다면 continue의 영향으로 다시 for문 맨 처음으로 돌아간다.
그러나 돌아갈때 i++ 증감이 한번 실행 되면서 다시 반복문이 시작이 된다.
continue label
package ex0709; public class Ex05_continue { public static void main(String[] args) { // continue label /* for(int i=1; i<=3; i++) { for(int j=1; j<=3; j++) { if(i+j==4) { continue; } System.out.println(i+ ","+ j); } } */ gogo: for(int i=1; i<=3; i++) { for(int j=1; j<=3; j++) { if(i+j==4) { continue gogo; } System.out.println(i+ ","+ j); } } } }
continue 라벨도 break 라벨과 같은 개념이다.
2~100 까지 수 중에서 소수를 한줄에 10개씩 출력
package ex0709; public class Ex06_continue { public static void main(String[] args) { // 2~100 까지 수 중에서 소수를 한줄에 10개씩 출력 int cnt = 0; jump: for(int n = 2; n<=100; n++) { for(int i=2; i<=(n/2); i++) { if(n%i==0) { continue jump; } } System.out.printf("%4d", n); if(++cnt % 10 == 0) { System.out.println(); } } } }
continue 라벨을 활용하면 코드가 짧아진다.
첫번째 for문 = 2~100까지 증가 안에 내용 반복
두번째 for문 = 소수를 구해서 소수가 아니면 jump로 n을 1추가하면서 이동
5개의 홀수(정수)를 입력 받아서 입력 받은 홀수의 합 구하기
단 입력 받은 수가 0보다 적거나 짝수이면 다시 입력
while, continue 사용package ex0709; import java.util.Scanner; public class Ex07_continue { public static void main(String[] args) { // 5개의 홀수(정수)를 입력 받아서 입력 받은 홀수의 합 구하기 // 단 입력 받은 수가 0보다 적거나 짝수이면 다시 입력 // while, continue 사용 Scanner sc = new Scanner(System.in);{ int s,n,i; s=i=0; System.out.print("홀수 입력 : "); /* while(i<5) { n = sc.nextInt(); if(n<0 || n%2==0) { System.out.println("다시 입력"); continue; } s+=n; i++; } System.out.println("결과 : "+ s); */ for(; i<5; i++) { n = sc.nextInt(); if(n<0 || n%2==0) { System.out.println("다시 입력"); i--; continue; } s+=n; } System.out.println("결과 : "+ s); sc.close(); } } }
배열 기초 [Array]
package ex0709; public class Ex08_array { public static void main(String[] args) { // 배열 기초 int []arr; //정수 값 저장할 수 있는 배열 선언 arr = new int[5]; //5개의 정수를 저장할 수 있도록 메모리 할당 // 위 두줄은 아래처럼 한줄로 표현 가능 //int[]arr = new int[5]; arr[2] = 10; arr[4] = 5; System.out.println(arr[0]); System.out.println(arr[2]); System.out.println(arr[4]); } }
배열 선언 및 메모리 할당
배열 전체 요소의 합 계산 및 각 요소의 값 출력
package ex0709; public class Ex09_array { public static void main(String[] args) { // 배열 선언 및 메모리 할당 int []a = new int[5]; System.out.println("배열 요소의 개수 : "+ a.length); //배열이 총 몇개인지 a[0]=2; a[1]=4; a[2]=6; a[3]=8; a[4]=10; //배열 전체 요소의 합 계산 및 각 요소의 값 출력 int s=0; for(int i=0; i<a.length; i++) { s+=a[i]; System.out.print(a[i] + " "); } System.out.println("\n합 : "+s); } }
향상된 for문
package ex0709; public class Ex10_array { public static void main(String[] args) { // 향상된 for문 int []a = new int[5]; a[0]=10; a[1]=50; a[2]=25; a[3]=30; a[4]=40; // 전체 출력 for(int i=0; i<a.length; i++) { System.out.print(a[i]+" "); } System.out.println(); //전체 출력 for(int n : a) { //향상된 for문 배열이 가지고 있는 수 만큼 반복 실행하면서 배열의 값을 하나씩 순서대로 변수에 대입 System.out.print(n+" "); } } } /* for(자료형 변수 : 배열등컬렉션){ //실행문 } */
5명의 이름과 점수를 입력 받아 편차(수-평균)을 출력
package ex0709; import java.util.Scanner; public class Ex11_array { public static void main(String[] args) { // 5명의 이름과 점수를 입력 받아 편차(수-평균)을 출력 Scanner sc = new Scanner(System.in); String[] name = new String[5]; int[] score = new int[5]; int tot; double ave, s; tot=0; for(int i = 0; i<name.length; i++) { System.out.print((i+1)+"번째 이름? "); name[i] = sc.next(); System.out.print(" 점수 ? "); score[i] = sc.nextInt(); tot+= score[i]; } ave = (double)tot/score.length; System.out.println("\n이름\t점수\t편차"); System.out.println("---------------------"); System.out.println("---------------------"); for(int i =0; i<score.length; i++) { s = score[i] - ave; System.out.println(name[i]+"\t"+score[i]+"\t"+s); } System.out.println("---------------------"); System.out.println("총합 : "+tot); System.out.println("---------------------"); System.out.println("평균 : "+ave); sc.close(); } }
이름과 점수를 담을 배열 2개 선언
for문으로 이름 넣은 배열 길이 만큼 반복을 돌려주면서 이름과 점수를 입력 받아서 배열에 넣음
그걸로 점수 총 합을 구할 수 있음
다시 반복문으로 점수 편차를 구할 수 있음
배열의 크기 변경
package ex0709; public class Ex12_array { public static void main(String[] args) { // 배열의 크기 변경 int [] a = new int[3]; a[0] = 10; a[1]=20; a[2]=30; System.out.println("결과"); for(int i=0; i<a.length; i++) { System.out.print(a[i]+" "); } System.out.println(); // 배열의 크기 변경 a = new int[5]; System.out.println("\n크기 변경 후 배열의 값"); for(int i=0; i<a.length; i++) { System.out.print(a[i]+" "); } System.out.println(); } } //배열이 초기화가 되어버린다. 기존에 있던 값들은 남아있지만 찾을 수 가없음
배열을 다시 선언하면 기존에 값이 있어도 다 0을 초기화가 된다.
근데 이게 기존에 있던 값을 지우고 0을 넣은게 아니라
새로운 주소를 할당해서 그 주소를 다시 선언한 배열에 넣는거다.
즉 기존에 a라는 배열 크기가 총 3칸인 배열에 값이 10,20,30 이 있었다면
그 배열칸 주소가 1이라고 한다면
새로 a 배열에 다시 새로 초기화 한다면 기존에 있던 주소 1의 방이 아닌
새로운 주소 2의 방이 생겨서 그 방을 a에 대입 하는거다.
이렇게 되면 기존 주소1의 방을 찾을 방법이 없어진다.
package ex0709; public class Ex13_array { public static void main(String[] args) { // 배열은 참조형이다. int [] a = new int[3]; a[0] = 10; a[1] = 20; a[2] = 30; System.out.println("초기 배열..."); for(int n : a) { System.out.print(n+" "); } System.out.println(); int [] b = a; // a배열과 b 배열이 참조하는 곳이 동일하다. 한 주소를 a,b가 같이 사용하는거라서 둘중 하나에서 바꾸면 다 바뀜 b[1] = 200; b[2] = 300; System.out.println("\na배열..."); for(int n : a) { System.out.print(n+" "); } System.out.println(); System.out.println("\nb배열..."); for(int n : b) { System.out.print(n+" "); } System.out.println(); } }
배열 초기화
배열은 초기화 하지 않으면 숫자 배열은 0, 객체는 null로 초기화package ex0709; public class Ex14_array { public static void main(String[] args) { // 배열 초기화 // 배열은 초기화 하지 않으면 숫자 배열은 0, 객체는 null로 초기화 int [] a = new int[] {2,4,6,8,20}; // 선언과 동시에 초기화 하는 경우 크기를 명시하지 않음 int [] b = {1,3,5,7,9}; //new int[] 생략 가능 int [] c; c = new int[] {1,2,3,4,5}; // c = {1,2,3,4,5}; // 에러 for(int n : a) { System.out.print(n+" "); } System.out.println(); for(int n : b) { System.out.print(n+" "); } System.out.println(); for(int n : c) { System.out.print(n+" "); } System.out.println(); } }
1~10 까지 난수를 100개 발생시켜 한줄에 10개씩 출력하고
마지막 각 숫자별 발생 횟수를 출력하는 프로그램 작성package ex0709; public class Ex15_array { public static void main(String[] args) { // 1~10 까지 난수를 100개 발생시켜 한줄에 10개씩 출력하고 // 마지막 각 숫자별 발생 횟수를 출력하는 프로그램 작성 int num; int [] count = new int[10]; System.out.println("발생된 난수(1~10)"); for(int i=1; i<=100; i++) { num = (int)(Math.random()*10)+1; count[num-1]++; // 각 숫자별 카운트 System.out.printf("%3d", num); if(i%10 == 0) { System.out.println(); } } System.out.println("\n숫자별 발생 횟수 : "); for(int z=0; z<count.length; z++) { System.out.println((z+1) + ":" + count[z]); } } }
배열을 사용해서 지폐권수 출력
package ex0709; import java.util.Scanner; public class Ex16_array { public static void main(String[] args) { // 지폐권 출력 Scanner sc = new Scanner(System.in); int money; int [] unit = new int[] {50000,10000,5000,1000,500,100,50,10,5,1}; System.out.print("금액 ? "); money = sc.nextInt(); System.out.println("금액\t\t개수"); for(int i=0; i<unit.length; i++) { System.out.printf("%,d원권\t\t%d개\n", unit[i], money/unit[i]); money %= unit[i]; } sc.close(); } }
달력 만들기
년, 월 입력 받아 달력 만들기
년도가 4의 배수이고 100의 배수가 아니거나 400의 배수이면 2월이 29일, 1년은 366일
나머지는 2월이 28일, 1년은 365
서기 1년 1월 1일은 월요일package ex0709; import java.util.Scanner; public class Ex17_array { public static void main(String[] args) { // 년, 월 입력 받아 달력 만들기 //년도가 4의 배수이고 100의 배수가 아니거나 400의 배수이면 2월이 29일, 1년은 366일 // 나머지는 2월이 28일, 1년은 365 //서기 1년 1월 1일은 월요일 Scanner sc = new Scanner(System.in); int[] months = new int[] {31,28,31,30,31,30,31,31,30,31,30,31}; int y,m; int tot; int w; do { System.out.print("년도? "); y = sc.nextInt(); } while(y<1); do { System.out.print("월? "); m = sc.nextInt(); } while(m<1 || m>12); months[1] = (y%4==0 && y%100 != 0) || (y%400==0) ? 29 : 28; tot = (y-1)*365 + (y-1)/4 - (y-1)/100 + (y-1)/400; for(int i = 0; i<m-1; i++) { tot += months[i]; } tot += 1; w = tot % 7; System.out.printf("\n\t%d년 %d월\n", y, m); System.out.println(" 일 월 화 수 목 금 토"); System.out.println("--------------------------------------------"); for(int i=0; i<w; i++) { System.out.print(" "); } for(int i=1; i<=months[m-1]; i++) { System.out.printf("%4d", i); if(++w % 7 == 0) { System.out.println(); } } if(w%7 != 0) System.out.println(); System.out.println("--------------------------------------------"); sc.close(); } }
1년1월1일 ~ 2021.07.01의 전체 날수를 구하려면
2020 * 365 + 2020/4 - 2020/100 + 2020/400 (위에 변수에서는 y)
그리고 2021.01.01 ~ 2021.07.01 까지의 날수를 더해준다
위에서 구한 전체 날수 + 1월+2월+3월+4월+5월+6월+1 (위 변수에서는 months)
반응형'프로그래밍 > JAVA 자바' 카테고리의 다른 글
배열 마무리 / 명령행인수 (0) 2021.07.13 배열, 2차원 배열, 여러가지 정렬 방법 (0) 2021.07.13 do-while문 / for문 / 별찍기 / 가위바위보 (0) 2021.07.09 자바 - while 문 (0) 2021.07.07 if 조건문 / switch문 (0) 2021.07.06