열심히 끝까지
[능력 단위 평가] - 6/17 문제 코딩 본문
------------------------------------------------ 문제 -----------------------------------------------------
[ 서술형 ]에서 현재 완성한 프로그램을 '오류검사' 진행하여 버전 업 할 예정입니다.
주어진 요구사항 이외에는 진행하지 않으셔도 됩니다.
1. 정수를 입력받습니다. 사용자는 정확히 정수만을 입력합니다.
2. 1에서 입력한 정수만큼의 랜덤정수를 저장한 배열을 생성합니다.
3. 이 랜덤 정수들은 1이상 50이하의 정수들로만 구성되어 있습니다. 서로 중복되지 않습니다.
4. 배열에 저장된 값들을 출력합니다.
함수까지만 시험
심화
+ ) 4의 기능을 수행하는 함수를 정의하고 호출하여 사용
+ ) 2, 3의 기능을 수행하는 함수를 정의하고 호출하여 사용
-------------------------------
[ 평가자체크리스트 ]에서 완성한 프로그램은 현재 '오류 검사'가 진행되지 않은 버전입니다.
사용자의 입력값에 대한 유효성 검사를 진행하고,
이를 적용한 코드로 프로그램 버전업 해주세요.
1) 패키지명 test
2) 클래스명 TEST
3) main()함수 포함
4) 전체코드를 정답란에 작성하세요. 이 과정에서 줄정렬이 적용되지 않을 수 있으나 무시하셔도 됩니다.
--------------------------------------------------- 코딩 --------------------------------------------------------
-------------평가자체크리스트
package test;
import java.util.Random;
import java.util.Scanner;
public class Test {
static void f1(int[] data) { // 배열(로또)를 출력해주는 메서드
for(int i = 0; i < data.length; i++) { // 입력받은 배열의 길이까지 반복하는 for문
System.out.print(data[i] + " "); // 배열 출력하는 함수
}
}
static int[] f2(int num) { // num를 입력하면 랜덤숫자를 num만큼 뽑는 메서드(배열로 만들기)
Random rand = new Random();
int[] lotto = new int[num]; // 입력받은 num만큼의 배열 생성
for(int i = 0; i < num; i++) {
lotto[i] = rand.nextInt(50)+1; // 랜덤함수 배열에 대입
for(int j = 0; j < i; j++) { // 위에 돌린 for문의 i 전까지 비교
if(lotto[i] == lotto[j]) { // 만약 arr[i]와 arr[j]가 같다면
i--; // i를 빼서 중복되지 않게 한다.
break; // 뒤를 돌릴 필요 없으니 break로 빠져나온다.
}
}
}
return lotto; // 로또 배열 주소 반환하기
}
// main 함수---------------------------------------
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 : ");
int num = sc.nextInt();
int[] lotto = f2(num); // 배열 함수 f2()를 lotto 배열에 저장
f1(lotto); // 함수 f1()을 이용해 lotto 출력
}
}
-------------------------서술형
package test;
import java.util.Random;
import java.util.Scanner;
public class TEST {
static void f1(int[] data) { // 배열(로또)를 출력해주는 메서드
for(int i = 0; i < data.length; i++) { // 입력받은 배열의 길이까지 반복하는 for문
System.out.print(data[i] + " "); // 배열 출력
}
}
static int[] f2(int num) { // num를 입력하면 랜덤숫자를 num만큼 뽑는 메서드(배열로 만들기)
Random rand = new Random();
int[] lotto = new int[num]; // 입력받은 num만큼의 배열 생성
for(int i = 0; i < num; i++) {
lotto[i] = rand.nextInt(50)+1; // 랜덤함수 배열에 대입
for(int j = 0; j < i; j++) { // 위에 돌린 for문의 i 전까지 비교
if(lotto[i] == lotto[j]) { // 만약 arr[i]와 arr[j]가 같다면
i--; // i를 빼서 중복되지 않게 한다.
break; // 뒤를 돌릴 필요 없으니 break로 빠져나온다.
}
}
}
return lotto; // 로또 배열 주소 반환하기
}
// main 함수---------------------------------------
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 : ");
int num = sc.nextInt();
while(true) { // break;를 쓰기 위한 반복문
if(num < 1 || 50 < num) { // 1(0을 입력받으면 배열을 출력할 수 없기때문)보다 작거나 50보다 크면
System.out.println("잘못 입력하셨습니다. 프로그램을 종료합니다."); // 종료한다는 문구 출력
break; // 프로그램 종료
}
int[] lotto = f2(num); // 배열 함수 f2()를 lotto 배열에 저장
f1(lotto); // 함수 f1()을 이용해 lotto 출력
break; // 프로그램 종료
}
}
}
--------------------------------------------------강사님 코딩(
1. 유효성 검사 전
package test;
import java.util.Random;
import java.util.Scanner;
public class Test01 {
static void f1(int[] data) {
for(int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
}
static int[] f2(int num) {
Random rand = new Random();
int[] data = new int[num];
int i = 0;
// 중복이 몇번 되서 나올지 모른다.
// while(true) flag 쓰는 문제
while(i < data.length) { // 인덱스가 배열 크기만큼 됬을 때
// 랜덤수를 우선 생성해보고,
int randNum = rand.nextInt(50) + 1; // 함수가 종료되면서 사라짐
boolean flag= false;
for(int j = 0; j < i; j++) {
if(randNum == data[j]) {
flag = true;
break;
}
}
if(flag) { // 중복발생 시
continue;
}
data[i] = randNum;
i++;
}
return data
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수입력 : ");
int num = sc.nextInt();
int[] lotto = new int[num];
f1(lotto);
}
}
2. 유효성 검사 후
package test;
import java.util.Random;
import java.util.Scanner;
public class Test01 {
static void f1(int[] data) {
for(int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
}
static int[] f2(int num) {
Random rand = new Random();
int[] data = new int[num];
int i = 0;
// 중복이 몇번 되서 나올지 모른다.
// while(true) flag 쓰는 문제
while(i < data.length) { // 인덱스가 배열 크기만큼 됬을 때
// 랜덤수를 우선 생성해보고,
int randNum = rand.nextInt(50) + 1; // 함수가 종료되면서 사라짐
boolean flag= false;
for(int j = 0; j < i; j++) {
if(randNum == data[j]) {
flag = true;
break;
}
}
if(flag) { // 중복발생 시
continue;
}
data[i] = randNum;
i++;
}
return data;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num; // 유효범위(scope)
while(true) {
System.out.print("정수입력 : ");
num = sc.nextInt();
if(1<= num && num <= 50) {
break;
}
System.out.println("1이상 50이하만 입력하세요!");
}
int[] lotto = new int[num];
f1(lotto);
}
}
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(과제)' 카테고리의 다른 글
[코딩 문제] - 6/15 ~ 6/17 퀵 정렬 (0) | 2022.06.17 |
---|---|
[수업 내용 발표] - 6/15 발표 자료 PowerPoint (0) | 2022.06.17 |
[능력 단위 평가] - 6/9 문제 코딩 + 다른 팀 문제 코딩 (0) | 2022.06.17 |
[10분 테코톡] 던의 JVM의 Garbage Collector 영상정리 (0) | 2022.06.12 |
[10분 테코톡] 제이의 시간복잡도 영상정리 (0) | 2022.06.12 |