code 실습 / 1️⃣1️⃣
✏️ res/data.txt 파일에 다음처럼 빈 공백으로 구분 된 값들이 있다.
20 30 29 39 49 38 10 19 87 29 38 27 8 90 87
1-1. 이 값들의 개수를 구하는 코드를 작성하시오. = 불러오기
int count = 0; { // 코드를 작성하는 공간 } Sysout.out.printf("count is %d\n", count); |
package ex4.save;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Random;
import java.util.Scanner;
public class Gp6 {
public static void main(String[] args) throws IOException, InterruptedException {
FileInputStream fis = new FileInputStream("res/data.txt");
Scanner scan = new Scanner(fis);
String a = scan.nextLine();
//파일 입력값 불러오기 과정. 문장 한줄로 받는다
int count = 0;
while(a.indexOf(" ")!=-1) { //-1이면(공백이 없으면) 멈추는것.
//-1이 아닐때(공백을 계속 만날때) while문이 계속 돈다
int index = a.indexOf(" ");
//a에 있는 첫번째 공백인덱스를 index에 저장
a = a.substring(index+1);
//a에 있는 첫번째 공백인덱스를 포함하지 않고 그다음값을 인덱스에 저장
//공백을 만날때마다 하나씩 잘리면서 점점 맨뒷값을 향해감
count++;
//공백을 만나면서 잘리고 > 카운트 1씩 올라가는것.
}
System.out.println(count++);
1-2. 이 값들 중에서 가장 큰 값이 무엇인지 출력하는 코드를 작성하시오.
int max = -1; { // 코드를 작성하는 공간 } Sysout.out.printf("max is %d\n", max); |
//1-1번 코드와 이어진다. 너무 길어져서 1-2부분만 가져온것
FileInputStream fis2 = new FileInputStream("res/data.txt");
Scanner scan2 = new Scanner(fis2);
int[] b = new int[count];//위에서만든 count배열의 길이를 배열b에 넣음
int max = -1; //최댓값 출력을 위한 변수 설정
for(int i=0; i<count; i++) {
b[i] = scan2.nextInt();
}//카운트의 값을 하나씩 넣어주는 배열b생성. 카운트의 길이만큼 이 과정이 반복
for(int i=0; i<count; i++) {
if(b[i]>max) { //배열b에 하나씩 들어간 값들과 max를 비교한다.
max = b[i];//max가 -1이니까 계속해서 최댓값이 반복문에 의해 갱신되며 최종적으로는 가장 큰값이 max에 담긴다
}
}
System.out.println(max);
1-3. 이 값들 중에 10 을 찾아서 그 위치(인덱스 값)을 출력하시오.
int index = -1; { // 코드를 작성하는 공간 } System.out.printf("index is %d\n", index); |
//1-1,1-2번 코드와 이어진다. 너무 길어져서 1-3부분만 가져온것
int index = -1;
for(int i=0; i<count; i++) {
if(b[i]==10) {
System.out.println(i);
}
}
✏️ 다음 각 절차를 따라 작성하시오.
// 2-1. nums라는 이름으로 정수 15개를 저장할 수 있는 배열 객체를 생성한다.
int nums = |
int[] nums = new int[15];
// 2-2. res/data.txt 파일에 저장된 값들을 nums 배열에 로드한다.
{ // 코드를 작성하는 공간 System.out.println("로드 완료"); } |
int[] nums = new int[15];
FileInputStream fis = new FileInputStream("res/data.txt");
//파일을 불러오고
Scanner scan = new Scanner(fis);
//스캐너로 불러온 파일의 값들을 scan에 입력시킨다
for(int i=0; i<nums.length; i++) { //nums의 길이만큼 반복되는 for문
nums[i] = scan.nextInt(); //scan에 입력된 파일의 값을 nums배열에 하나씩 넣어준다
System.out.println(nums[i]);
}
// 2-3. 0~14 범위의 랜덤값 2개를 얻어서 그 위치의 값을 서로 바꾼다. 그것을 50번 반복한다.
{ // 코드를 작성하는 공간 System.out.println("번호 섞기 완료"); } |
Random rand = new Random();
// 랜덤
for (int j = 0; j < 50; j++) {//50번 반복 for문
int a = rand.nextInt(15);
int b = rand.nextInt(15);
//변수 두개를 만들어서 랜덤값을 넣어주고
int tmp = nums[a];
nums[a] = nums[b];
nums[b] = tmp;
//a,b의 자리를 바꿔준다. 전체 자리를 바꾸는게 아니니까 for문 생성할필요 없음
for (int i = 0; i<nums.length; i++)
System.out.print(nums[i]+" ");
//출력을 위한 for문
Thread.sleep(3000);
for(int i = 0; i<100; i++)
System.out.println();
}//출력 확인을 위한 쓰레드. 두자리가 번갈아 가며 바뀌는걸 볼수있다
// 2-4. res/data-out.txt 파일로 배열의 값들을 저장
{ // 코드를 작성하는 공간 System.out.println("저장 완료"); } |
int[] nums = new int[15];
//res/data값을 넣을 nums배열 생성
FileInputStream fis = new FileInputStream("res/data.txt");
Scanner scan = new Scanner(fis);
//res/data값을 넣을 과정 구문들
for(int i=0; i<nums.length; i++) { //nums배열 길이만큼 반복되면서
nums[i] = scan.nextInt(); //res/data값을 nums배열에 넣는다
System.out.println(nums[i]); //nums배열에 값이 잘 들어갔는지 확인
}
✏️ 뉴렉이는 다음과 같이 1학년 4학기동안 시험 성적을 배열에 등록했다
int[] exams = { 90, 100, 40, 50 };
3월 2일이되어 2학년을 시작한 뉴렉이는 시험 성적을 더 넣고싶어한다.
for문과 배열 이용하여 뉴렉이의 성적 배열 크기를 두배로 늘려주자
int size = 4;
int[] exams = new int[size];
// for문과 Scanner를 사용하여 90, 100, 40, 50를 exams에 넣기
int[] newExams = ?
for() {
?
}
// exams를 출력
결과 : exams = { 90, 100, 40, 50, 0, 0, 0, 0 };
💡 관련 지식은 배열과 ArrayList입니다 :)
int size = 4;
//size변수 생성
int[] exams = new int[size];
//exams변수에 size변수 크기를 대입하므로 exams[4]
FileInputStream fis1 = new FileInputStream("res/data-out.txt");
Scanner sc = new Scanner(fis1);
//res/data파일값을 불러오기 위한 구문
for(int i=0; i<exams.length; i++) { //exams배열 길이만큼 반복되면서
exams[i] = sc.nextInt(); //sc의 값을 exams에 넣어준다
//nextInt로 받을땐 콤마쓰면 오류남!! <띄어쓰기>써야함
}
int[] newExams = new int[size*2];
//사이즈의 길이를 두배 늘려서 8칸으로 만든뒤에, 그 칸수를 newExams배열에 대입시킨다.newExams[8]
//배열의 크기를 늘리기 위해선 더큰배열을 만들고 기존의 값을 하나씩 이사시킨뒤에(아래for문 과정) 한번에 옮긴다
//배열을 한번 생성되면 크기 한번에 못바꾸기 때문에 이런 과정을 거치는것
for(int i=0; i<exams.length; i++) { //또다시 exams길이만큼 반복되는 반복문을 만들고
newExams[i] = exams[i]; //exams 배열의 ★값★을 newExams배열에 옮겨주고
}
exams = newExams; //최종적으로 newExams의 값을(0000) 8칸으로 늘어난 exams에 넣어주면
for(int i=0; i<exams.length; i++) {
System.out.printf("{%d} ",exams[i]); //exams[i]+newExams[i] = 90 100 40 50 / 0 0 0 0 출력
}
선택정렬: 전체 배열의 값에서 현재의 최소값이랑 비교하는것. 이미 비교가 완료된것은 건드리지 x
삽입정렬: 현재위치에서 그이하의 배열들(앞의값)을 비교해 자신이 들어갈 위치를 찾고 그 위치에 삽입되는
버블: 매번연속된 두개의 인덱스를 비교하여 정한 기준의 값을 뒤로 넘겨 정렬 바로옆자리 비교
https://hsp1116.tistory.com/33
기본 정렬 알고리즘(Sorting Algoritm) 요약 정리 (선택, 삽입, 버블, 합병, 퀵) v1.1
정렬 알고리즘은 n개의 숫자가 입력으로 주어졌을 때, 이를 사용자가 지정한 기준에 맞게 정렬하여 출력하는 알고리즘이다.예를 들어 n개의 숫자가 저장되어있는 배열을, 오름차순의 조건으로
hsp1116.tistory.com