힘들...
8시간 동안 컴퓨터 화면 쳐다보는게 쉬운게 아니구나
오늘은 새로운 개념을 배웠다기 보단 배열+제어문을 활용해서 이런저런 로직을 짜는 것들을 연습해봤다.
그리고 어려웠당 ^___^
어제 잠깐 배웠던 정렬 로직을 먼저 공부하고 그 다음에 다른 활용들 + String 문자열을 배웠음
// 정수 1개를 입력받아서 2진법으로 만드는 프로그램 => 16bit (0,1=>16개)
//32767 (양수만 처리)
/*
* 1. 정렬
* = 선택정렬
* = 버블정렬
* 1-1 빈도수 확인
* 1231112222 => 문자열
* 2. 윤년 => 달력
* 3. 숫자 야구 게임 (중복이 없는 난수 발생)
* ===============
* 로또 => 6개
*
* 4. 문자열배열
*
*
*
*/
/*
* 1. 변수(저장공간)
* = 0,1을 16개 저장할 수 있는 공간 => 배열
* = 사용자 입력값 저장
* = 배열 => 16 => index번호를 제어할 변수
*/
import java.util.Scanner;
public class 배열활용_2 {
public static void main(String[] args) {
int[] binary=new int[16]; //0,1
int input; // 사용자가 입력한 정수 저장
int index=15; // 배열에 값 채울 경우 (뒤(length-1) or 앞(0))
Scanner scan = new Scanner(System.in);
System.out.print("0~32767사이의 정수를 입력하시오:");
input=scan.nextInt();
// 입력된 정수에 따라 반복수행이 다름 => while 사용
/*
* 1. 정수를 나누고 나머지 저장
* 2. 정수를 2로 나눈다
*/
System.out.println("=====라이브러리=====");
System.out.println(Integer.toBinaryString(input));
while(true)
{
binary[index]=input%2; // 0,1 저장
input=input/2;
if(input==0)
break;
index--;
}
//출력
for(int i=0; i<binary.length; i++)
{
if(i%4==0 && i!=0)
System.out.print(" ");
System.out.print(binary[i]);
}
}
}
이거는 정수를 2진법으로 바꾸는 로직이었다.
오케 확인 완료
선택정렬&버블정렬 둘 다 배웠는데 선택정렬은 이미 어제 포스팅에 했으니
버블정렬만 쓰도록 하겠다.
버블 정렬은 옆에 있는 수끼리 비교해서 뒤에부터 고정을 해 나가서 정렬을 해 나가는 방식이다.
조금 더 어렵다
/*
* 버블정렬 : 인접한 수끼리 비교해서 변경
* i=0 j=0 j=4
* i=1 j=0 j=3
* i=2 j=0 j=2
* i=3 j=0 j=1
*
* j=4-i
*
*
*
* 30 20 50 10 40
* == ==
* 20 30
* == ==
* 30 50
* == ==
* 10 50
* == ==
* 40 50(고정)
* ==============================
* 20 30 10 40 50
* == ==
* 20 30
* == ==
* 10 30
* == ==
* 30 40 50
* ================================
*
* 20 10 30 40 50
* == ==
* 10 20
* == ==
* 20 30 40 50
* =================================
* 10 20 30 40 50
* == ==
* 10 20 30 40 50
* =================================
*
*/
public class 배열활용_4 {
public static void main(String[] args) {
int[] arr= {30, 20, 50, 10, 40};
System.out.println("====정렬 전====");
for(int i:arr)
{
System.out.print(i+" ");
}
System.out.println("\n====정렬 후====");
for(int i=0; i<arr.length-1; i++)
{
for(int j=0; j<arr.length-1-i; j++)
{
if(arr[j]>arr[j+1])
{
int temp =arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
for(int k:arr)
{
System.out.print(k+" ");
}
System.out.println();
}
System.out.println("==="+(i+1)+"Round ====");
}
System.out.println("===최종결과===");
for(int k:arr)
{
System.out.print(k+" ");
}
}
}
핵심은 아래로 몇줄 옆으로 몇줄 확인해야 하느냐가 관건이다
아래로 i줄 내려 가야하니까 얼마 이동해야할지 생각을 하고,
옆으로 j번 돌리니까 arr.length-1-i 만큼 돌려주고
temp 써서 값 바꿔주는것 까지 까먹으면 안된다.
버블정렬은 바로 옆에 인접한 수 (뒤에 있는 수)와 크기 비교를 해주는거기 때문에
if문 안의 조건이 arr[j] > arr[j+1] 이렇게 들어가는것도 잊으면 안되고
그 다음은 또 머리속이 ???로 가득찼던 빈도수 계산 문제
이걸 하는 이유가 빈도수를 계산 할 수 있으면 가장 많이 쌓인 어떤 데이터를 가져와서 뽑아 낼 수 있기 때문이다.
수업이 끝나고도 계속 이짓중이라 지침
하지만 나중에 자산이 되겠지
(안되기만 해봐라 개갓은)
/*
* 0~9까지 사이의 난수 100개 가져오기
* 각각 몇개 인지 확인하고 저장해주는 count 배열 만들기
*/
public class 빈도수확인연습 {
public static void main(String[] args) {
int [] arr = new int [100];
int [] count = new int [10];
for(int i = 0; i<arr.length; i++) {
arr[i]=(int)(Math.random()*10);
}
for(int i : arr)
{
count[i]++;
}
System.out.print("만들어진 배열: ");
for(int i : arr)
{
System.out.print(i);
}
System.out.println();
for(int i =0; i<count.length; i++)
{
System.out.println(i+":"+count[i]);
}
System.out.println("===최종 결과값===");
int max=0;
for(int i =0; i<count.length; i++)
{
if(max<count[i])
{
max=count[i];
}
}
for(int i=0; i<count.length; i++) {
if(max==count[i])
{
System.out.println(i+":"+count[i]);
}
}
}
}
내손내만 코드 ^^
손으로 만들었다고 했지 내 머리로 만들었다고는 안했습니다?
ㅋㅋ
장난이구여.. 수업에서 배운 코드 열심히 복습해본 다음에 이해했는지 확인차 혼자 다시 짜봄
막혔을때 중간에 한두번 보긴했지만..
이정도면 내가 짠거라 해보자...
우기면 다 돼
안되는건 없어
아 이제 진짜 힘든데...
어.. 진짜...
아 이 다음 내용은 문자열 메소드 였으니까 이제 진짜 그만할래..
문자열은 뒤에가서도 배우니까.....
근데 또 안하기엔 찝찝해서 걍 한다
의지의 한국인... 한국인... 난 한국 싫은데...
// equals : 문자열 비교 (일반 데이터 ==)
import java.util.Scanner;
public class 배열활용_7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
final String ID="Admin"; // char[] id={'A','d','m','i','n'}
final String PWD="1234"; // 상수
Scanner scan=new Scanner(System.in);
String myid="";
String mypwd="";
System.out.print("ID를 입력하세요?");
myid=scan.next();
System.out.print("비밀번호를 입력하세요?");
mypwd=scan.next();
/*
* equalsIgnoreCase = 대소문자 구분 없이
* equals = 대소문자 구분
* Java JAVA JaVa
*/
if(myid.equalsIgnoreCase(ID) && mypwd.equals(PWD))
{
System.out.println(myid+"님 로그인되었습니다");
}
else
{
System.out.println("ID나 비밀번호가 틀립니다");
}
}
}
여기부터는 문자열인데 진짜 어려운건 아니여서 그냥 눈으로 보고 이해했으면 쓰고만 넘어가겠다.
.equals를 사용해서 문자열이 일치 하는지 확인해주는 메소드
로그인 기능에 유용하게 쓰일 것
public class 배열활용_8 {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*String data="Hello Java!!";
char[] cdata=data.toCharArray(); // {'H','e','l'~~}
for(char c:cdata)
{
System.out.println(c);
}*/
/*char[] cdata={'A','B','C','D','E'};
String data=String.valueOf(cdata);// 문자배열 => 스트링
System.out.println(data);*/
// substring()
/*
* substring(int start)
* substring(int start , int end)
* ======== 제외 6,10-1
* MainClass.java => indexOf(".")
* A.java
*
* String data="Hello Java!!";
* 01234567891011
*/
String data="0123456789";
System.out.println(data.substring(3));
/*
* "unhappy".substring(2) returns "happy"
* 0123445
"Harbison".substring(3) returns "bison"
01234567
"hamburger".substring(4, 8) returns "urge" 4~7
012345678
"smiles".substring(1, 5) returns "mile" 1~4
012345
c>=4 && c<=8
*/
System.out.println(data.substring(3,6));// endIndex - 1
}
}
start와 end를 잘라주는 기능... 그냥 메소드 쓰기만 하면 되는거라 어려운게 없다.
필기를 왜 날려먹었지? 라고 생각했는데 그냥 안한거였다
ㅋㅋ
아 이제 진짜 끗끗끝긋
내일 중복없이 번호를 만드는 로직을 배울거라는데
아니 사실 오늘 끝에 했는데
이미 그쯤엔 정신이 반쯤 나가 있었어서 뇌에 남아있는게 없다
어차피 낼 오전에 다시 해준다고 하셨으니....
진짜 내일 포스팅에 해야지
'programming > Gukbi' 카테고리의 다른 글
국비 교육 11일차 - Method (0) | 2021.01.10 |
---|---|
국비 교육 10일차 - 달력만들기 + 숫자 야구 게임 (0) | 2021.01.07 |
국비 교육 8일차 - 배열 (0) | 2021.01.05 |
국비 교육 7일차 - 2차 for문 (0) | 2021.01.04 |
국비 교육 6일차 - 반복문 (0) | 2020.12.31 |