2021/01/13 - [공부/자바(java) 융합개발자 2차] - [자바 기초] 21일차 - 반복문(for, while, do ~ while)
2021/01/12 - [공부/자바(java) 융합개발자 2차] - [자바 기초] 20일차 일지 - Eclipse에서 Hello 출력, 변수, if문
com.day03 패키지 생성
Exam01.java 지난 시간 복습 - 아래와 같이 출력되도록 하기
*********
*******
*****
***
*
package com.day03;
public class Exam01 {
public static void main(String[] args) {
for(int i = 9; i > 0; i -= 2) {
for(int j = i; j >0; j--) {
System.out.print("*");
}
System.out.println("");
}
System.out.println("========================");
for(int i = 9; i > 0; i -= 2) {
for(int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
System.out.println("========================");
for(char i = 'I'; i>='A'; i--) {
for(char j='A'; j<=i; j++) {
System.out.print(j);
}
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 no = sc.nextInt();
int sum=0;
System.out.println("숫자를" + no + "개 입력하세요");
for(int i=1; i <= no; i++) {
int no1 = sc.nextInt();
sum = sum + no1;
}
System.out.println("숫자 " + no + "개의 합 : " + sum);
}
}
숫자를 몇개 입력하시겠습니까?
2
숫자를2개 입력하세요
20 30
숫자 2개의 합 : 50
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 no = sc.nextInt();
int sum=0;
System.out.println("숫자를" + no + "개 입력하세요");
for(int i=0; i < no; i++) {
int no1 = sc.nextInt();
sum += no1;
}
System.out.println("숫자 " + no + "개의 합 : " + sum);
}
}
숫자를 몇개 입력하시겠습니까?
8
숫자를8개 입력하세요
10 30 50 4 8 6 5 1
숫자 8개의 합 : 114
그 수의 합계를 출력한 뒤 입력해준 수도 출력하고 싶다면?
for문 밖에서 System.out.print(num1+"\t"); 을 해주면 마지막에 입력된 값만 출력이 됨
-> 이 때 배열이 필요함
배열 : 같은 자료형을 갖는 구조
Exam03. int형 5개를 가지는 배열
int[] arr = new int[5];
arr은 int형의 배열이구나.
이 배열은 5개의 int를 가지는 배열 arr 이구나.
package com.day03;
public class Exam03 {
public static void main(String[] args) {
int[] arr = new int[5];
System.out.println("arr:"+arr);
}
}
arr:[I@3ac3fd8b
배열은 주소값을 가진다.
arr:[I@3ac3fd8b -> 컴퓨터 메모리에 주어진 주소값
배열은 0부터 시작하고 int의 초기값은 0
package com.day03;
public class Exam03 {
public static void main(String[] args) {
int[] arr = new int[5];
System.out.println("arr:"+arr);
for(int i=0; i < 5; i++) {
System.out.println(arr[i]); // arr[0] arr[1] arr[2] arr[3] arr[4]
}
}
}
0
0
0
0
0
package com.day03;
public class Exam03 {
public static void main(String[] args) {
int[] arr = new int[5];
arr[3] = 100;
for(int i=0; i < 5; i++) {
System.out.println(arr[i]); // arr[0] arr[1] arr[2] arr[3] arr[4]
}
}
}
0
0
0
100
0
package com.day03;
public class Exam03 {
public static void main(String[] args) {
int[] arr = new int[5];
arr[3] = 100;
for(int i=0; i < 5; i++) {
System.out.println(arr[i]); // arr[0] arr[1] arr[2] arr[3] arr[4]
}
arr[5] = 200;
}
}
오류 남 -> arr은 0~4까지 5개 이므로
배열의 길이를 바꾸면 for문의 i < 배열길이 도 계속 바꿔줘야 함
이 때 arr.length를 이용하면 알아서 배열의 길이가 적용됨
package com.day03;
public class Exam03 {
public static void main(String[] args) {
int[] arr = new int[10];
arr[3] = 100;
for(int i=0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
배열.ltength 를 해주면 내가 배열을 5로 만들던 10으로 만들던 수정할 필요 없이 알아서 배열 길이만큼으로 적용이 된다.
0
0
0
100
0
0
0
0
0
0
크기가 5인 배열 tmp 를 만들고 tmp의 값은 1 2 3 4 5 로 한 뒤 출력하라
package com.day03;
public class Exam03 {
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]);
}
}
}
1
2
3
4
5
조금 더 세련되게 표현해보자
package com.day03;
public class Exam03 {
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]);
}
}
}
또는
package com.day03;
public class Exam03 {
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]);
}
}
}
1
2
3
4
5
값을 100 200 300을 가지는 배열 크기가 3인 str 생성
int[] str = new int[3];
str[0] = 100;
str[1] = 200;
str[2] = 300;
이것을
int[] str = {100, 200, 300};
배열의 초기값을 알고 있다면 이렇게 간단하게 표현할 수 있음
그러나 이 str은 크기가 3으로 고정이되어 str[0] str[1] str[2]까지만 되고 str[3]에 어떤 값이라도 추가할 수 없음
처음 만든 크기로 고정이 됨
문자열 배열 생성
package com.day03;
public class Exam03 {
public static void main(String[] args) {
String[] st = {"Hello", "Java", "Hi"};
for(int i=0; i < st.length; i++) {
System.out.println(st[i]);
}
}
}
Hello
Java
Hi
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 no = sc.nextInt();
int sum=0;
int[] tmp = new int[no];
System.out.println("숫자를" + no + "개 입력하세요");
for(int i=0; i < no; i++) {
tmp[i] = sc.nextInt();
sum += tmp[i];
}
System.out.println("숫자 " + no + "개의 합 : " + sum);
for(int i=0; i < tmp.length; i++) {
System.out.println("입력 값 : " + tmp[i]);
}
}
}
숫자를 몇개 입력하시겠습니까?
3
숫자를3개 입력하세요
10 20 30
숫자 3개의 합 : 60
입력 값 : 10
입력 값 : 20
입력 값 : 30
위의 입력 값 중 최대값을 출력하고 싶다.
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 no = sc.nextInt();
int sum=0;
int[] tmp = new int[no];
System.out.println("숫자를" + no + "개 입력하세요");
for(int i=0; i < no; i++) {
tmp[i] = sc.nextInt();
sum += tmp[i];
if(tmp[i] > max) {
max = tmp[i];
}
System.out.println("숫자 " + no + "개의 합 : " + sum);
for(int i=0; i < tmp.length; i++) {
System.out.println(tmp[i]);
}
//입력값 중에서 최대 값을 출력하시오.
System.out.println("최대 값은 : " + max);
}
}
숫자를 몇개 입력하시겠습니까?
3
숫자를3개 입력하세요
100 5 50
숫자 3개의 합 : 155
100
5
50
최대 값은 : 100 .
Exam04 int형의 배열 data를 만들고 10, 5, 100, 200, 30, 77을 할달하고 최대값, 배열 합계, 평균을 출력하라.
package com.day03;
public class Exam04 {
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 {
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("배열 평균 : " + sum/data.length);
}
}
최대값이 몇 번째에 있는지 위치를 알고싶다.
package com.day03;
public class Exam04 {
public static void main(String[] args) {
int[] data = {10, 5, 100, 200, 30, 77};
int max = 0;
int sum = 0;
int maxPos = 0;
for(int i = 0; i < data.length; i++) {
sum += data[i];
if(data[i] > max) {
max = data[i];
maxPos = i+1;
}
}
System.out.println("최대값 : " + max);
System.out.println("최대값의 위치 : " + maxPos);
System.out.println("배열 합계 : " + sum);
System.out.println("배열 평균 : " + (float)sum/data.length);
}
}
최대값 : 200
최대값의 위치 : 4
배열 합계 : 422
배열 평균 : 70.333336
배열에서 수 찾기
선생님 답
package com.day03;
import java.util.Scanner;
public class Exam04 {
public static void main(String[] args) {
int[] data = {10, 5, 100, 200, 30, 77};
int max = 0;
int sum = 0;
int maxPos = 0;
for(int i = 0; i < data.length; i++) {
sum += data[i];
if(data[i] > max) {
max = data[i];
maxPos = i+1;
}
}
System.out.println("최대값 : " + max);
System.out.println("최대값의 위치 : " + maxPos);
System.out.println("배열 합계 : " + sum);
System.out.println("배열 평균 : " + (float)sum/data.length);
System.out.println("찾는 수를 입력해주세요");
Scanner sc = new Scanner(System.in);
int search = sc.nextInt();
boolean flag = false;
for(int i = 0; i < data.length; i++)
{
if(search==data[i]) {
System.out.println("배열에 있습니다.");
flag = true;
break;
}
}
if(flag== false) {
System.out.println("없습니다");
}
}
}
최대값 : 200
최대값의 위치 : 4
배열 합계 : 422
배열 평균 : 70.333336
찾는 수를 입력해주세요
54
없습니다.
최대값 : 200
최대값의 위치 : 4
배열 합계 : 422
배열 평균 : 70.333336
찾는 수를 입력해주세요
77
있습니다.
난수 Math.random() : 컴퓨터가 발생시켜주는 수
0~1 사이의 double형 난수 발생
package com.day03;
import java.util.Scanner;
public class Exam04 {
public static void main(String[] args) {
System.out.println(Math.random());
}
}
0.1630248549583463
0~10 사이의 난수 발생
package com.day03;
import java.util.Scanner;
public class Exam04 {
public static void main(String[] args) {
System.out.println(Math.random()*10);
}
}
2.9155579149803525
-> 정수형으로 강제 변환 시켜주기
(int)(Math.random()*10);
package com.day03;
import java.util.Scanner;
public class Exam04 {
public static void main(String[] args) {
int r = (int)(Math.random()*10);
System.out.println(r);
}
}
9
Exam05. 크기가 10인 배열을 만들고, 0~50 사이 난수를 발생해서 배열에 넣기
단, 0이 아닌 값을 넣기
배열에 값(중복) 허용
package com.day03;
public class Exam05 {
public static void main(String[] args) {
int[] arr = new int[10];
for(int i=0; i < arr.length; i++)
{
int r = (int)(Math.random()*50);
if(r != 0) {
arr[i] = r;
System.out.println("arr[" + i + "] : " + arr[i]);
}
}
}
}
arr[0] : 31
arr[1] : 46
arr[2] : 22
arr[3] : 30
arr[4] : 44
arr[5] : 16
arr[6] : 21
arr[7] : 36
arr[9] : 27
처럼 정수형으로 강제 전환한 난수가 0인 경우(여기서는 i가 8일 때 난수가 0이어서) arr[8]은 제외하고 출력되는 문제 발생
난수가 0일 경우 또 다른 난수를 생성해 출력하는 방법이 필요함
내 답
package com.day03;
public class Exam05 {
public static void main(String[] args) {
int[] arr = new int[10];
for(int i=0; i < arr.length; i++)
{
int r = (int)(Math.random()*50);
arr[i] = (r != 0) ? r : (int)(Math.random()*50);
System.out.println("arr[" + i + "] : " + arr[i]);
}
}
}
arr[0] : 36
arr[1] : 39
arr[2] : 22
arr[3] : 28
arr[4] : 43
arr[5] : 42
arr[6] : 12
arr[7] : 43
arr[8] : 8
arr[9] : 49
-> 이건 틀렸을 듯!!
선생님 답
난수를 몇 번 발생시킬것인지 모른다. 왜? 난수가 0이 발생할 경우 0이 아닐때까지 또 돌려야 하므로
-> while : 몇 번 돌릴지 모른다.
package com.day03;
public class Exam05 {
public static void main(String[] args) {
int[] arr = new int[10];
int n = 0; // 배열에 넣은 수
while(n<arr.length) {
int r = (int)(Math.random()*50); // 여기서 발생한 난수가 0이 아닐 때 arr[n]에 r 집어넣음
if(r==0) continue; // 난수 r이 0이면 다시 난수 발생시키러 올라감
arr[n] = r;
n++;
}
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
더 간단하게 표현해보기
package com.day03;
public class Exam05 {
public static void main(String[] args) {
int[] arr = new int[10];
int n = 0; // 배열에 넣은 수
while(n<arr.length) {
int r = (int)(Math.random()*50); // 여기서 발생한 난수가 0이 아닐 때 arr[n]에 r 집어넣음
if(r==0) continue; // 난수 r이 0이면 다시 난수 발생시키러 올라감
arr[n] = r;
n++;
}
for(int num : arr) {
System.out.print(num + "\t");
}
}
}
28 25 23 31 16 28 2 2 46 10
for(int num : lotto) {
System.out.print(num);
}
위, 아래가 같은 말!
for(int num = 0; num < lotto.length; num++) {
System.out.print(lotto[num]);
}
for each문 참고
로또 번호 추첨기 만들기(중복된 값X, 1~45사이의 숫자 6개 발생시킬 것)
package com.day03;
public class Exam06 {
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 {
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--; //앞에 중복된 난수를 n--해서 새로운 난수로 대체될 수 있게함
break;
}
}
n++; // 배열에 로또번호 들어갔으니 1 증가
}
//로또 번호 6개 출력하기
for(int num : lotto) {
System.out.print(num + "\t");
}
}
}
'프로그래밍 > 자바(java) 융합개발자 2차' 카테고리의 다른 글
[자바 4일차] 23일차 - 클래스 (0) | 2021.01.15 |
---|---|
[자바 3일차 2] 22일차 2 - 클래스, 객체 (0) | 2021.01.14 |
[자바 2일차] 21일차 - 반복문(for, while, do ~ while) (0) | 2021.01.13 |
[자바 1일차] 20일차 일지 - Eclipse에서 Hello 출력, 변수, if문 (0) | 2021.01.12 |
[자바 기초] 19일차 일지 - 8장. 반응형 웹 디자인하기 2 (0) | 2021.01.11 |