2021/01/15 - [공부/자바(java) 융합개발자 2차(복습)] - [복습] 2일차 복습 - 자바 기본(for, while, do ~ while, 이중 for문)
2021/01/13 - [공부/자바(java) 융합개발자 2차(복습)] - [1일차] 복습 & 자바 기본 익히기(p.18~)
오늘 복습할 내용은 22일차 때 배운 내용들!
2021/01/14 - [공부/자바(java) 융합개발자 2차] - [자바 기초] 22일차 - 배열, 난수
2021/01/14 - [분류 전체보기] - [자바 기초] 22일차 2 - 클래스, 객체
com.day03 패키지 생성
Exam01.java 아래와 같이 출력되도록 하기 ??
ABCDEFGHI
ABCDEFGH
ABCDEFG
ABCDEF
ABCDE
ABCD
ABC
AB
A
package com.day03;
public class Exam01 {
public static void main(String[] args) {
for (char j = 'J'; j > 'A'; j--) {
for (char i = 'A'; i < j; i++) {
System.out.print(i);
}
System.out.println();
}
}
}
ABCDEFGHI
ABCDEFGH
ABCDEFG
ABCDEF
ABCDE
ABCD
ABC
AB
A
Exam02 몇 개 입력받을지 물어보고, 그 수만큼 숫자를 입력하여, 그 수들의 합계를 출력
package com.day03;
import java.util.Scanner;
public class Exam02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("몇 개를 입력하시겠습니까?");
int gae = sc.nextInt();
System.out.println(gae + "개의 수를 입력하세요");
int i = 0;
int sum = 0;
while(i < gae) {
sum += sc.nextInt();
i++;
}
System.out.println(gae + "개의 수의 합 : " + sum);
}
}
for를 써서도 해보기
package com.day03;
import java.util.Scanner;
public class Exam02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("몇 개를 입력하시겠습니까?");
int gae = sc.nextInt();
System.out.println(gae + "개의 수를 입력하세요");
int i = 0;
int sum = 0;
for(i = 0; i < gae ; i++) {
sum += sc.nextInt();
}
System.out.println(gae + "개의 수의 합 : " + sum);
}
}
몇 개를 입력하시겠습니까?
5
5개의 수를 입력하세요
3 8 6 7 5
5개의 수의 합 : 29
그 수의 합계를 출력한 뒤 입력해준 수도 같이 출력하고 싶다면?
package com.day03;
import java.util.Scanner;
public class Exam02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("몇 개를 입력하시겠습니까?");
int gae = sc.nextInt();
System.out.println(gae + "개의 수를 입력하세요");
int i = 0;
int sum = 0;
for(i = 0; i < gae ; i++) {
int no = sc.nextInt();
System.out.print(no + "\t");
sum += no;
}
System.out.println(gae + "개의 수의 합 : " + sum);
}
}
몇 개를 입력하시겠습니까?
5
5개의 수를 입력하세요
3 8 4 5 4
3 8 4 5 4
5개의 수의 합 : 24
합을 먼저 출력하고 뒤에 입력한 수를 입력하려면..... 어떡하지?
for문 밖에서 System.out.println(no+"\t");을 입력해주면 가장 마지막에 입력된 값만 출력이 될 것
이럴 때는 배열이 필요하다.
배열 : 같은 자료형을 갖는 구조
Exam03 int형 5개를 가지는 배열
int[] arr = new int[5]; -> arr은 int형 5개를 가지는 배열이구나!
package com.day03;
public class Exam03 {
public static void main(String[] args) {
int[] arr = new int[5];
System.out.println(arr);
}
}
[I@7637f22 -> arr이라는 배열은 주소값을 가진다 : 이 주소는 컴퓨터 메모리에 주어진 주소값
package com.day03;
public class Exam03 {
public static void main(String[] args) {
int[] arr = new int[5];
for (int i=0;i<5;i++) {
System.out.println(arr[i]);
}
}
}
0
0
0
0
0
배열 arr은 각각의 주소에 초기값으로 0을 가지고 있구나!
package com.day03;
public class Exam03 {
public static void main(String[] args) {
int[] arr = new int[5];
for (int i=0;i<6;i++) {
System.out.println(arr[i]);
}
}
}
배열은 [0] 부터 시작하는구나!
package com.day03;
public class Exam03 {
public static void main(String[] args) {
int[] arr = new int[5];
arr[3] = 30;
for (int i=0;i<5;i++) {
System.out.println(arr[i]);
}
}
}
0 -> arr[0]
0 -> arr[1]
0 -> arr[2]
30 -> arr[3]
0 -> arr[4]
arr[5]에 뭘 집어넣으려고 하면 에러가 남! arr은 0~4까지 5개가 존재
배열의 길이를 바꾸면 for문의 i < 배열길이 도 계속 바꿔줘야 함
이 때 arr.length를 이용하면 알아서 배열의 길이가 적용됨
package com.day03;
public class Exam03 {
public static void main(String[] args) {
int[] arr = new int[5];
for (int i=0;i<5;i++) {
System.out.println(arr[i]);
}
}
}
여기에서 내가 arr의 배열이 갖는 값을 더 늘리거나 줄이면 for문에서도 i < 5 부분을 계속 수정해 주어야 함
-> 이 때 쓸 수 있는 게 arr.length
package com.day03;
public class Exam03 {
public static void main(String[] args) {
int[] arr = new int[10];
for (int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
}
배열.ltength 를 해주면 내가 배열을 5로 만들던 10으로 만들던 수정할 필요 없이 알아서 배열 길이만큼으로 적용이 된다.
Exam03_tmp 크기가 5인 배열 tmp 를 만들고 tmp의 값은 1 2 3 4 5 로 한 뒤 출력하라
package com.day03;
public class Exam03_tmp {
public static void main(String[] args) {
int[] tmp = new int[5];
tmp[0] = 1;
tmp[1] = 2;
tmp[2] = 3;
tmp[3] = 4;
tmp[4] = 5;
for(int i=0; i<tmp.length;i++) {
System.out.println("tmp["+i+"] : " + tmp[i]);
}
}
}
tmp[0] : 1
tmp[1] : 2
tmp[2] : 3
tmp[3] : 4
tmp[4] : 5
변형 : 조금 더 세련되게
package com.day03;
public class Exam03_tmp {
public static void main(String[] args) {
int[] tmp = new int[5];
for(int i=0; i<tmp.length; i++) {
tmp[i] = i+1;
}
for(int i=0; i<tmp.length;i++) {
System.out.println("tmp["+i+"] : " + tmp[i]);
}
}
}
tmp[0] : 1
tmp[1] : 2
tmp[2] : 3
tmp[3] : 4
tmp[4] : 5
또는
package com.day03;
public class Exam03_tmp {
public static void main(String[] args) {
int[] tmp = new int[5];
for(int i=0; i<tmp.length;i++) {
tmp[i] = i+1;
System.out.println("tmp["+i+"] : " + tmp[i]);
}
}
}
Exam03_str 값을 100 200 300을 가지는 배열 크기가 3인 str 생성
package com.day03;
public class Exam03_str {
public static void main(String[] args) {
int[] str = new int[3];
str[0] = 100;
str[1] = 200;
str[2] = 300;
}
}
줄여서 간단하게 표현해보자! 생성하면서 바로 값을 할당해주기
package com.day03;
public class Exam03_str {
public static void main(String[] args) {
int[] str = {100, 200, 300};
}
}
배열의 초기값을 알고 있다면 이렇게 간단하게 표현할 수 있음
그러나 이 str은 크기가 3으로 고정이되어 str[0] str[1] str[2]까지만 되고 str[3]에 어떤 값이라도 추가할 수 없음
처음 만든 크기로 고정이 됨
Exam03_str2 문자열 배열 str에 Hello, Java, Hi를 할당하고 출력하기
package com.day03;
public class Exam03_str2 {
public static void main(String[] args) {
String[] str = {"Hello","Java","Hi"};
for(int i=0; i<str.length; i++) {
System.out.println(str[i]);
}
}
}
Hello
Java
Hi
Exam02로 돌아가서 입력한 갯수만큼 수를 입력받아 그 수들의 합을 구한 뒤, 입력해준 값 출력하기
Exam02_Return
package com.day03;
import java.util.Scanner;
public class Exam02_Return {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("몇 개를 입력하시겠습니까?");
int gae = sc.nextInt();
System.out.println(gae + "개의 수를 입력하세요");
int sum = 0;
int[] no = new int[gae];
for(int i = 0; i < gae ; i++) {
no[i] = sc.nextInt();
sum += no[i];
}
System.out.println("\n" + gae + "개의 수의 합 : " + sum);
for(int i = 0; i < gae ; i++) {
System.out.print(no[i]+"\t");
}
}
}
몇 개를 입력하시겠습니까?
5
5개의 수를 입력하세요
5 8 6 4 2
5개의 수의 합 : 25
5 8 6 4 2
위의 입력 값 중 최대값을 출력하고 싶다.
package com.day03;
import java.util.Scanner;
public class Exam02_Return {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("몇 개를 입력하시겠습니까?");
int gae = sc.nextInt();
System.out.println(gae + "개의 수를 입력하세요");
int sum = 0;
int[] no = new int[gae];
int max = 0;
for(int i = 0; i < gae ; i++) {
no[i] = sc.nextInt();
sum += no[i];
if(no[i] > max) {
max = no[i];
}
}
System.out.println("\n" + gae + "개의 수의 합 : " + sum);
for(int i = 0; i < gae ; i++) {
System.out.print(no[i]+"\t");
}
System.out.println("최대값 : " + max);
}
}
몇 개를 입력하시겠습니까?
5
5개의 수를 입력하세요
5 10 58 33 2
5개의 수의 합 : 108
5 10 58 33 2 최대값 : 58
Exam04 int형의 배열 data를 만들고 10, 5, 100, 200, 30, 77을 할당하고 최대값, 배열 합계, 평균을 출력하라.
package com.day03;
public class Exam04_data {
public static void main(String[] args) {
int[] data = { 10, 5, 100, 200, 30, 77 };
int max = 0;
int sum = 0;
float avg = 0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
if (data[i] > max) {
max = data[i];
}
}
avg = sum/data.length;
System.out.println("최대값 : " + max);
System.out.println("배열 합계 : " + sum);
System.out.println("평균 : " + avg);
}
}
최대값 : 200
배열 합계 : 422
평균 : 70.0
package com.day03;
public class Exam04_data {
public static void main(String[] args) {
int[] data = { 10, 5, 100, 200, 30, 77 };
int max = 0;
int sum = 0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
if (data[i] > max) {
max = data[i];
}
}
System.out.println("최대값 : " + max);
System.out.println("배열 합계 : " + sum);
System.out.println("평균 : " + (float)sum/data.length);
}
}
최대값 : 200
배열 합계 : 422
평균 : 70.333336
최대값이 몇 번째에 있는지 위치를 알고싶다.
package com.day03;
public class Exam04_data {
public static void main(String[] args) {
int[] data = { 10, 5, 100, 200, 30, 77 };
int max = 0;
int sum = 0;
int no = 0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
if (data[i] > max) {
max = data[i];
no = i;
}
}
System.out.println("최대값 : " + max);
System.out.println("최대값의 위치 : data[" + no + "]");
System.out.println("배열 합계 : " + sum);
System.out.println("평균 : " + (float)sum/data.length);
}
}
최대값 : 200
최대값의 위치 : data[3]
배열 합계 : 422
평균 : 70.333336
배열에서 수 찾기
package com.day03;
import java.util.Scanner;
public class Exam04_data {
public static void main(String[] args) {
int[] data = { 10, 5, 100, 200, 30, 77 };
int max = 0;
int sum = 0;
int no = 0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
if (data[i] > max) {
max = data[i];
no = i;
}
}
System.out.println("최대값 : " + max);
System.out.println("최대값의 위치 : data[" + no + "]");
System.out.println("배열 합계 : " + sum);
System.out.println("평균 : " + (float)sum/data.length);
System.out.println("찾는 수를 입력해주세요");
Scanner sc = new Scanner(System.in);
int wanted = sc.nextInt();
boolean flag = false;
for (int i = 0; i < data.length; i++) {
if (wanted == data[i]) {
flag = true;
break;
}
}
if(flag==true) {
System.out.println("있습니다");
} else {
System.out.println("없습니다");
}
}
}
최대값 : 200
최대값의 위치 : data[3]
배열 합계 : 422
평균 : 70.333336
찾는 수를 입력해주세요
55
없습니다
난수 : Math.random() 컴퓨터가 발생시켜주는 수, 0~1 사이의 double형 난수를 발생시킴
Exam04_Ramdom 난수를 출력해보자.
package com.day03;
public class Exam04_Random {
public static void main(String[] args) {
System.out.println(Math.random());
}
}
0.11024784391310327
Exam04_Ramdom2 0~10 사이의 난수를 출력해보자.
package com.day03;
public class Exam04_Random2 {
public static void main(String[] args) {
//Math.random() -> 0~1 사이의 난수 발생
//0~10 사이의 난수 발생하려면 ? x10 해주면 됨
System.out.println(Math.random()*10);
}
}
5.858479499384107
0~10 사이의 랜덤한 정수 출력
package com.day03;
public class Exam04_Random2 {
public static void main(String[] args) {
//Math.random() -> 0~1 사이의 난수 발생
//0~10 사이의 정수를 랜덤으로 발생시키려면 ?
System.out.println((int)(Math.random()*10));
}
}
8
(int)Math.random() 하면 (int)0.465468 -> 이므로 항상 0이 나옴 -> x10해준 값을 int형으로 변환시켜주어야 함
Exam05 크기가 10인 배열을 만들고, 0~50 사이 난수를 발생해서 배열에 넣기
단, 0이 아닌 값을 넣기
배열에 값(중복) 허용
package com.day03;
public class Exam05 {
public static void main(String[] args) {
int[] arr = new int[10]; //크기가 10인 배열 만들기
int i = 0;
while(i<arr.length) {
arr[i] = (int)(Math.random()*50); //0~50사이의 난수 발생
if(arr[i] == 0) continue;
System.out.println("arr[" + i + "] : " + arr[i]);
i++;
}
}
}
arr[0] : 1
arr[1] : 13
arr[2] : 36
arr[3] : 15
arr[4] : 37
arr[5] : 33
arr[6] : 32
arr[7] : 39
arr[8] : 48
arr[9] : 13
여기서 while을 써준 이유는 만약에 난수가 0일 때 i++을 시키지 않고 다시 난수를 발생시키고 그게 0이 아닐 때만
저장을 해야 하므로 몇 번 돌아야 하는지 알 수가 없기 때문!
만약에 arr[3] == 0 이면 아래 문장(출력, i++)을 실행시키지 않고 다시 arr[3]에 랜덤한 난수를 발생시켜 집어 넣는다
Exam04_ForEach for문을 간단하게 표현해보기
ex) lotto라는 6개의 숫자를 배열이 있고 이 배열을 출력하고자 할 때
package com.day03;
public class Exam04_ForEach {
public static void main(String[] args) {
int[] lotto = {1, 5, 6, 8, 9, 7};
for(int i=0;i<lotto.length;i++) {
System.out.println(lotto[i]);
}
}
}
이렇게 작성한다. 이걸 for each문으로 간결하게 나타내면
package com.day03;
public class Exam04_ForEach {
public static void main(String[] args) {
int[] lotto = {1, 5, 6, 8, 9, 7};
for(int i : lotto) {
System.out.println(i);
}
}
}
1
5
6
8
9
7
for each문 참고
Exam06_lotto 로또 번호 추첨기 만들기(중복된 값X, 1~45사이의 숫자 6개 발생시킬 것) ★나중에 다시 보기
package com.day03;
public class Exam06_lotto {
public static void main(String[] args) {
int[] lotto = new int[6];
int n = 0; // 배열에 들어간 로또 번호의 갯수
do {
boolean flag = false;
int r = (int) (Math.random() * 45+1); // 0~44가 나오므로 +1해주기
// 중복이면 배열에 못 들어가도록 break;
for (int i = 0; i < n; i++) {
if (r == lotto[i]) {
flag = true;
break;
}
}
if (flag == true) continue;
lotto[n] = r;// 난수를 배열에 저장
n++;
// 배열에 로또번호 들어갔으니 1 증가
} while (n < lotto.length);
// 로또 번호 6개 출력하기
for (int num : lotto) {
System.out.print(num + "\t");
}
}
}
이 방법은 중복이면 아예 넣지 않는 방법
Exam07 다른 방법으로 바꿔보기 -> do ~ while문 말고 while문 사용하기
package com.day03;
public class Exam07_lotto {
public static void main(String[] args) {
int[] lotto = new int[6];
int n = 0; // 배열에 들어간 로또 번호의 갯수
while (n < lotto.length) {
int r = (int) (Math.random() * 45+1); // 0~44가 나오므로 +1해주기
lotto[n] = r;// 난수를 배열에 저장
for (int i = 0; i < n; i++) {
if (r == lotto[i]) {
n--;
break;
}
}
n++;// 배열에 로또번호 들어갔으니 1 증가
}
// 로또 번호 6개 출력하기
for (int num : lotto) {
System.out.print(num + "\t");
}
}
}
28 31 23 11 1 43
'프로그래밍 > 자바(JAVA)' 카테고리의 다른 글
[자바 미니 프로젝트] 참고 사이트 (0) | 2021.02.05 |
---|---|
[복습] 4일차 복습 - 22일차2 ~ 23일차 복습(클래스, 객체) 진행 중 (0) | 2021.01.16 |
[복습] 2일차 복습 - 자바 기본(for, while, do ~ while, 이중 for문) (0) | 2021.01.15 |
[1일차] 복습 & 자바 기본 익히기(p.18~) (0) | 2021.01.13 |
[자바 기초] 이지스퍼블리싱 Do it! 공부단 신청 (0) | 2021.01.13 |