기록
day 0513 반복문_배열 본문
제어문 : 프로그램 수행중에 사용자의 상황에 따라 흐름을 제어하기 위한 문장(명령어)
- 선택문 :
if, switch
- 반복문 : 조건을 만족할 동안에 특정 명령어(문장)을 계속하여 반복 실행시키기 위한 명령어(문장)을 말한다.
for, while, do-while
(while, do-while의 차이 : 처음부터 조건식을 만족하지 않을때에 while문 : 반복문을 한번도 동작하지 않을 수 있다
그러나 do-while문은 적어도 한번은 do문을 동작한다)
- 기타 break, continue
/*
사용자한테 n을 입력받아 1~n까지의 합을 누적하여 출력하는
프로그램을 for, while, do-while 으로 각각 작성 해 봅니다.
*/
// 자바가 미리 만들어놓은 class, Scanner를 사용하기 위하여 import 한다
import java.util.Scanner;
// 자바 프로그램을 만들려면 반드시 하나 이상의 클래스가 있어야한다
class D01 { // SumTestFor
// 자바 프로그램은 반드시 하나의 main 메소드를 가져야한다
public static void main(String[] args) {
// 키보드로부터 데이터를 입력받기 위하여 Scanner를 생성한다
Scanner sc = new Scanner(System.in);
// 사용자한테 입력받아서 저장하기 위한 변수 n 선언
int n;
System.out.print("n을 입력하시오.");
n = sc.nextInt();
// for문
// 합을 누적하여 저장 할 변수 sum 선언하고, 0으로 초기화 한다
int sum1=0;
for(int i = 1; i <= n; i++){
sum1 += i;
}
// D02 while
int j = 1;
int sum2 = 0;
while(j <= n){
sum2 += j;
j++;
}
// D03 do-while
int k = 1;
int sum3 = 0;
do{
sum3 += k;
k ++;
}while(k <= n);
System.out.printf("for문 합 : %d\n", sum1);
System.out.printf("while문 합 : %d\n", sum2);
System.out.printf("do-while문 합 : %d\n", sum3);
}
}
<< break와 continue >>
break
: switch, 반복문에서 사용하며 해당 중괄호를 탈출시키고자 할 때 사용합니다
if ~한 상황이냐? 그럼 탈출해 break;
class D04 { // BreakTest
public static void main(String[] args) {
// 1 ~ 10까지의 수 출력하기
for(int i = 1; i <= 10; i++){
if (i % 3 == 0){
break;
}
System.out.println(i);
}
System.out.println("작업종료");
}
}
continue
: cotinue를 만나면 그 이후의 반복문은 동작하지 않고(제외시키고)
반복문에서만 사용하며 다음 조건식을 판별하거나 다음 증감식을 동작시키라는 의미 입니다
class D05 { //ContinueTest
public static void main(String[] args) {
// 3의 배수를 제외한 모든 수 출력하기
for(int i = 1; i <= 10; i++){
if(i % 3 ==0){
/*
이 상황을 예외 시킨다.
다음 조건식을 판별하러 간다 (이 조건이라면 증감식을 동작하러 감)
*/
continue;
}
System.out.println(i);
}
System.out.println("작업종료");
}
}
/*
1 ~ 10까지의 모든수를 출력하되
3의 배수는 제외시킵니다.
*/
class D05 { //NotContinueTest
public static void main(String[] args) {
for(int i = 1; i <= 10; i++){
if(i % 3 != 0){
System.out.println(i);
}
}
System.out.println("작업종료");
}
}
class D08 { //StringTest
public static void main(String[] args) {
String data;
data = "hello";
System.out.println(data);
char ch;
// 문자열의 모든 글자를 한글자씩 가져와서 출력하도록 반복문을 이용해 봅니다.
for(int i = 0; i < data.length(); i++){
ch = data.charAt(i);
System.out.println(ch);
}
}
}
/*
문자열 데이터 소문자 o는 모두 몇개가 있는지 판별하여 출력
*/
class D09 { //StringTest
public static void main(String[] args) {
String data;
data = "hellohello";
System.out.println(data);
char ch;
int cnt = 0;
// 문자열의 모든 글자를 한글자씩 가져와서 출력하도록 반복문을 이용해 봅니다.
for(int i = 0; i < data.length(); i++){
ch = data.charAt(i);
if(ch == 'o'){
cnt++;
}
}
System.out.printf("문자열 데이터 소문자 o 는 %d개", cnt);
}
}
배열
: 자료형이 같은 기억장소의 모임
나는 어느 고등학교의 컴퓨터교사입니다 ((쌤은 사회선생님 재ㅐ질이시다 ,,))
우리반의 성적처리하는 프로그램을 작성하려고 합니다
우리반은 모두 30명이에요
30명의 점수를 입력받아서 저장하고, 총점, 평균도 구하고 싶어요
그러면 먼저 30명 학생의 점수를 저장하기 위한 변수를 선언해야 할 거에요
int student1;
int student2;
int student3.
전교생 3000명에 대한 처리를 해야 한다면 하루종일 변수만 선언하다 시간이 다 가요
이럴때 자료형이 같은 기억장소가 많~이 필요해요
이럴 때 일일히 변수이름을 정해주지 않고
자료형과 대표이름 그리고 몇개가 필요한지 정해주어서 변수를 필요한 만큼 선언할 수 있어요
==> 배열
만약, 정수형 변수가 5개가 필요하다고 할 때 다음과 같이 배열을 표현할 수 있어요
1) int [] a;
// 배열의 크기 [5]
2) a = new int[5];
// 배열의 요소
[ ] [ ] [ ] [ ] [ ] ==> 정수형 변수 4byte, 대표 변수 : a
// 배열의 인덱스
[0][1][2][3][4]
a[0] = 100;
a[1] = 200;
a[2] = 300;
a[3] = 400;
a[4] = 500;
==> 배열의 크기가 n일 때 배열의 인덱스 0 ~ n-1
class D10 { // ArrayTest
public static void main(String[] args) {
// 정수형 배열
int [] a;
a = new int[5];
a[0] = 100;
a[1] = 200;
a[2] = 300;
a[3] = 400;
a[4] = 500;
// java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5 at D10.main(D10.java:14)
// a[5] = 600;
System.out.println("종료");
}
}
class D11 { // ArrayTest
public static void main(String[] args) {
int []a; // int a[]; 기호 위치는 상관없지만 java는 앞에 쓰는걸 선호
a = new int[5];
// int []a = new int[5]; 한줄로 사용 가능하다
a[0] = 100;
a[1] = 200;
a[2] = 300;
a[3] = 400;
a[4] = 500;
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
System.out.println(a[3]);
System.out.println(a[4]);
System.out.println("종료");
}
}
// 로또 1~45까지의 숫자 6개
class D12 { // ArrayTest
public static void main(String[] args) {
int []lotto;
lotto = new int[6];
lotto[0] = 2;
lotto[1] = 43;
lotto[2] = 21;
lotto[3] = 7;
lotto[4] = 16;
lotto[5] = 33;
// 옆으로 5칸잡고 출력해
System.out.printf("%5d", lotto[0]);
System.out.printf("%5d", lotto[1]);
System.out.printf("%5d", lotto[2]);
System.out.printf("%5d", lotto[3]);
System.out.printf("%5d", lotto[4]);
System.out.printf("%5d\n", lotto[5]);
// 출력문을 반복문을 이용한 것으로 수정 해 봅니다
for (int i = 0; i < 6; i++){
System.out.printf("%5d", lotto[i]);
}
}
}
문자열의 길이 ==> length();
배열의 길이 ==> length; 괄호가 없다
// 로또 1~45까지의 숫자 6개
class D13 { // ArrayTest
public static void main(String[] args) {
// 배열을 선언함과 동시에 초기값을 나열할 수 있다(초기화 할 수 있다)
int []lotto = {2, 43, 21, 7, 16, 33};
// 길이를 알려주는 속성 length
for (int i = 0; i < lotto.length; i++){
System.out.printf("%5d", lotto[i]);
}
}
}
/*
5명의 점수를 입력받아 총점과 평균을 구하여 출력하는 프로그램을 작성
*/
import java.util.Scanner;
class D14 { // StudentTest
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
/*
int []score; // 배열의 선언
score = new int[5]; // 배열의 생성
*/
int []score = new int[5]; //한줄로 가능
int tot = 0, avg;
for(int i = 0; i < score.length; i++){
System.out.print("학생의 점수를 입력하시오 : ");
score[i] = sc.nextInt(); // i가 0이면 0번째, 1이면 1번째에 저장
tot = tot + score[i]; // 점수 누적 tot += score[i]; 복합치환 연산자
}
// 평균은 한번만 계산하기
avg = tot / score.length;
System.out.println("총점 : " + tot);
System.out.println("평균 : " + avg);
}
}
/*
10명의 점수를 입력받아 총점과 평균을 구하여 출력하는 프로그램을 작성
*/
import java.util.Scanner;
class D15 { // StudentTest
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int []score = new int[10];
int tot = 0, avg;
for(int i = 0; i < score.length; i++){
// %d번째 학생이 나오도록 출력하기
System.out.printf("%d번째 학생의 점수를 입력하시오 : ", i+1);
score[i] = sc.nextInt();
tot = tot + score[i];
}
avg = tot / score.length;
System.out.println("총점 : " + tot);
System.out.println("평균 : " + avg);
}
}
/*
평균보다 낮은 점수의 학생의 수를 구하여 출력 해 봅니다
*/
import java.util.Scanner;
class D16 { // StudentTest
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int []score = new int[10];
int tot = 0, avg;
for(int i = 0; i < score.length; i++){
System.out.printf("%d번째 학생의 점수를 입력하시오 : ", i+1);
score[i] = sc.nextInt();
tot = tot + score[i];
}
avg = tot / score.length;
// 평균이 계산되고 난 다음 다시 반복문을 써서 평균 이하인 학생의 수를 구해야한다
int cnt = 0; // 학생 수 구하기위한 변수
for(int i = 0; i < score.length; i++){ // i는 for문안에서 사용하기때문에 다시 써도 된다
// score[i] 점수가 avg보다 더 작다면
if(score[i] < avg){
cnt++;
}
}
System.out.println("총점 : " + tot);
System.out.println("평균 : " + avg);
System.out.println("평균 미만 학생 수 : " + cnt);
}
}
/*
연습) 4지 선다형 문항의 답안 10개를 입력받아
답이 옳은지 판별하여 'o','x'를 출력하고
정답수와 틀린답수를 각각 구하여 출력하는 프로그램을 작성합니다.
단) 모범답안은 프로그램에서 임의로 초기화 하세요.
<< 실행 예 >>
1번 답을 입력하시오. 1
2번 답을 입력하시오. 2
2번 답을 입력하시오. 1
...
10번 답을 입력하시오.3
*** 성적 처리 결과 ***
1 2 3 ... 10 // 문항번호 출력
o x o o // O, X 출력
배열 : 모범답안, 학생답안 2개
*/
import java.util.Scanner;
class D17 { // StudentTest
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 모범답안을 미리 초기화하기
int []dap = {1, 3, 2, 4, 3, 3, 2, 4, 1, 2};
// 학생 답을 입력받기위한 배열
int []user = new int[10];
// 정답수 구하기위한 변수
int n = 0;
// 반복문을 이용하여 10개 문항의 답안을 입력
for(int i = 0; i < user.length; i++){
System.out.printf("%d번 답을 입력하시오. : ", i + 1);
user[i] = sc.nextInt();
}
// 문항번호를 출력합니다
for (int i = 1; i <= dap.length; i++){
System.out.print(i+"\t");
}
System.out.println();
// 답이 옳은지 판별하여 O, X를 출력하기
for(int i = 0; i < dap.length; i++){
if(dap[i] == user[i]){
System.out.print("O\t");
n++; // 정답 수 구하기
}else{
System.out.print("X\t");
}
} // for문 끝나는 구간
System.out.println("\n 정답수 : " + n);
System.out.println("\n 틀린답수 : " + (10-n));
}
}
/* 배열로 출력하기
switch(n){
case 0: System.out.println("영"); break;
case 0: System.out.println("일"); break;
case 0: System.out.println("이"); break;
case 0: System.out.println("삼"); break;
case 0: System.out.println("사"); break;
case 0: System.out.println("오"); break;
case 0: System.out.println("육"); break;
case 7: System.out.println("칠"); break;
case 8: System.out.println("팔"); break;
case 9: System.out.println("구"); break;
default: System.out.println("입력 오류");
}
*/
import java.util.Scanner;
class D18 { // DigitToKorIfSwitch
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String []kor = {"영", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구"};
int n;
System.out.print("0~9사이의 수를 입력 : ");
n = sc.nextInt();
System.out.println(kor[n]);
}
}
14:00 ~
/*
배열의 요소중에 가장 큰 수 찾기
1) 배열의 맨 첫번째 요소를 max라고 본다
2) 배열의 두 번째 요소부터 끝까지 max와 비교하여 그 값이 max보다 크다면 그 값을 max에 저장한다
*/
class D19 { // MaxTest
public static void main(String[] args) {
// 첫 번째 요소 max : 13
int []data = {13,10,5,25,30,12};
int max;
max = data[0]; // 배열의 맨 첫번째 요소를 max에 저장한다
// 맨 첫 번째 요소는 max 에 있기때문에 int i = 1; 부터 시작한다
for(int i = 1; i < data.length; i++){
if(data[i] > max){
max = data[i]; // max를 갱신한다
}
}
System.out.println("가장 큰수는 " + max);
}
}
/*
3) 가장 큰 값이 있는 위치 알아보기
(단, 최대값이 중복되지 않다고 가정한다)
*/
class D20 { // MaxTest
public static void main(String[] args) {
int []data = {13,10,5,25,30,12};
int max;
int maxPosition = 0;
max = data[0];
for(int i = 1; i < data.length; i++){
if(data[i] > max){
max = data[i];
maxPosition = i;
}
}
System.out.println("가장 큰수는 " + max);
System.out.println("최대값의 인덱스 위치는 " + maxPosition);
}
}
/*
인생에 있어 가장 중요하게 여기는 5가지를 입력받아
출력 해 봅시다
*/
import java.util.Scanner;
class D20_1 { // StringArrayTest
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String []data = new String[5];
System.out.println("인생에서 중요하게 여기는 것 5가지를 말해주세요");
for (int i = 0; i < data.length; i++){
System.out.printf("%d번째 입력하시오. : ", i + 1);
data[i] = sc.next();
}
System.out.println("*** 결과 ***");
for(int i = 0; i < data.length; i++){
System.out.println(data[i]);
}
}
}
/Eclipse 다운/
https://www.eclipse.org/downloads/
package com.kosta.exam;
public class Hello {
public static void main(String[] args) {
System.out.println(); // sout
System.out.println(); // syso
System.out.println(); // ctrl + 화살표 : 이동
System.out.println(); // ctrl + alt + 아래 화살표 : 복사
// ctrl + space : 자동완성기능
}
}
/*
인생에 있어 가장 중요하게 여기는 5가지를 입력받아
출력 해 봅시다
*/
package com.kosta.exam;
import java.util.Scanner;
public class D20StringArrayTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] data = new String[5];
System.out.println("인생에서 중요하게 여기는 것 5가지를 말해주세요");
for (int i = 0; i < data.length; i++) {
System.out.printf("%d번째 입력하시오. : ", i + 1);
data[i] = sc.next();
}
System.out.println("*** 결과 ***");
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
}
}
/Eclipse로 Max값, index 위치 출력하기/
package com.kosta.exam;
import java.util.Iterator;
import java.util.Scanner;
/*
5명의 점수를 입력받아
최고값과 인덱스 위치를 구하여 출력
배열중에 가장 큰 값 찾기
1) 배열의 맨 첫번째 요소를 max에 저장한다
2) 나머지 배열의 요소를 모두 max와 비교하여 그 값이 max보다 크다면
그 값을 max에 저장한다
*/
public class D21_MaxTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] score = new int[5];
for (int i = 0; i < score.length; i++) {
System.out.printf("%d번 째 학생의 점수를 입력 : ", i + 1);
score[i] = sc.nextInt();
}
int max;
int maxPosition = 0;
max = score[0];
for(int i = 1; i < score.length; i++) {
if(score[i] > max) {
max = score[i];
maxPosition = i;
}
}
System.out.println("최대값 : " + max);
System.out.println("최대값 인덱스 : " + maxPosition);
}
}
/*
5명 학생의 이름, 점수를 입력받아서 최고 점수인 학생의 이름을 출력해 봅니다
*/
package com.kosta.exam;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] name = new String[5];
int[] score = new int[5];
int max = score[0];
String maxPosition = name[0];
for(int i = 0; i < name.length; i++) {
System.out.printf("%d번 째 학생의 이름 : ", i + 1);
name[i] = sc.next();
System.out.printf("%d번 째 학생의 점수 : ", i + 1);
score[i] = sc.nextInt();
if(score[i] > max) {
max = score[i];
maxPosition = name[i];
}
}
System.out.println("최고 점수인 학생 : " + maxPosition);
}
}
/*
방법2)
String[] name = new String[5];
int[] score = new int[5];
for(int i = 0; i < name.length; i++) {
System.out.printf("%d번 째 학생의 이름 : ", i + 1);
name[i] = sc.next();
System.out.printf("%d번 째 학생의 점수 : ", i + 1);
score[i] = sc.nextInt();
}
// 맨 첫번째 요소의 값을 가장 크다고 본다
// 이름, 점수 입력 받은 후 결과 출력해야한다 (순서 중요)
int max = score[0];
int idx = 0;
// 나머지 배열의 모든 요소를 max와 비교하여
//그 값이 max보다 더 크면 그 값을 max에 저장한다
for(int i = 1; i <score.length; i++){
if(score[i] > max){
max = score[i];
idx = i;
}
}
System.out.ptinrf("최고점수는 %d점 이고, 이름은 %s 입니다.", max, name[idx]);
}
}
*/
package com.kosta.exam;
public class D23CharIntTest {
public static void main(String[] args) {
int data = 65;
System.out.println(data);
System.out.println((char)data); // 형변환
System.out.println((char)(data+1)); // 66 B
System.out.println((char)(data+2)); // 67 C
System.out.println("===============");
int data2 = 97; // a
System.out.println(data2);
System.out.println((char)data2);
System.out.println("===============");
char ch = 'A';
System.out.println(ch);
System.out.println((int)ch);
System.out.println(ch+1); // 66
System.out.println((char)(ch+1)); // B
}
}
/*
LAB 2
사용자가 입력한 문자열에서 각각의 문자들이 나타나는 횟수를 계산하는
프로그램을 작성하여 보자.
*/
package com.kosta.exam;
import java.util.Scanner;
public class D24CountLetter {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 26개의 정수를 저장할 수 있는 배열 count를 선언하고 생성하기
int[] count = new int[26];
System.out.println("문자열을 입력하시오. : ");
// nextLine(); 공백문자도 입력 받을 수 있다(문장 입력 할 때)
String buffer = sc.nextLine();
// 각 문자가 등장하는 회수를 계산한다
for(int i = 0; i < buffer.length(); i++) {
char ch = buffer.charAt(i);
count[ch - 'a'] ++;
}
// 배열에 저장된 횟수를 출력하는 반복 루프
for(int i = 0; i < count.length; i++){
System.out.printf("%c ==> %d\n", (char)('a'+i), count[i]);
}
}
}
- 오늘 학습한 내용에 대하여 요약 및 정리하고 궁금한 점 질문하는 시간을 갖도록 합니다
- pdf "배열"의 프로그래밍 1번, LAB의 1번을 작성 해 봅니다
/*
PROGRAMMING 1.
12개월 동안의 카드 사용 금액을 double형의 배열에 저장하는 클래스 Credit-Card를 설계하라.
프로그램은 다음과 같은 정보를 반환하는 메소드를 가져야 한다.
완전한 프로그램을 작성하여 테스트하라.
사용자로부터 월별 사용 금액을 입력받을 때는 음수를 체크하도록 하라.
- 1년 동안의 전체 사용 금액
- 월별 평균 사용 금액
- 가장 지출이 많았던 월
- 가장 지출이 적었던 월
*/
/*
LAB 1.
사용자로부터 정수를 입력받아서 배열에 저장하고 출력하는 프로그램을 작성하여 보자.
*/
import java.util.Scanner;
class TestArray {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
// 10개의 정수를 저장할 수 있는 배열을 선언하고 생성하라
__;
// 사용자로부터 정수를 받아서 배열에 저장하는 반복 루프
__;
__;
// 배열에 저장된 정수를 출력하는 반복 루프
__;
__;
}
}
/*
1) 위의 프로그램의 빈칸을 채우고 실행하여 보라.
2) 배열에 저장된 정수를 출력할 때, for-each 반복 구조를 사용하여 보라.
3) 배열에 저장된 정수를 역순으로 출력하여 보라.
*/
'📖' 카테고리의 다른 글
day 0516 정렬_객체와 클래스 (0) | 2024.05.16 |
---|---|
day 0514 배열_메소드 (0) | 2024.05.14 |
day 0510 선택문_반복문 (0) | 2024.05.10 |
day 0509 연산자_선택문 (0) | 2024.05.09 |
day 0508 자료형_연산자 (0) | 2024.05.08 |