public class NumberTest {
public static void main(String[] args) {
int num = 10;
String numStr = "20";
int numTmp = Integer.parseInt(numStr); // 문자열을 int로
String strTmp = String.valueOf(num); // int를 문자
System.out.println(Math.floor(3.7)); // 내림 3.0
System.out.println(Math.ceil(3.1)); // 올림 4.0
int[] arr1 = {1, 2, 3};
int[] arr2 = Arrays.copyOf(arr1.3);//배열 복사
}
}
Integer.parseInt() > 문자열을 int로Integer.toString() > int를 문자열로 > int만 변경 가능String.valueOf() > int를 문자열로(정수뿐 아니라 다양한 자료형을 변경 가능.substring() > 괄호 안에 인덱스값을 넣으면 그 값 이후부터 끝까지 문자열을 가져온다..substring( , ) > 괄호 안에 , 를 기준으로 인덱스 값을 넣으면 왼쪽 인덱스 값부터 오른쪽 인덱스 값까지의 문자열만 가져온다.Math.floor() > 내림(double로 반환)Math.round() > 반올림(long, int로 반환)Math.ceil() > 반올림(double로 반환)Arrays.sort() > 오름차수 정렬Arrays.toString() > 배열의 값들이 다 String으로 []안에서 출력Arrays.copyOf(복사할 배열 변수명 , 몇개 복사할 지) > 배열 복사System.arraycopy(복사할 배열 변수명, 복사할 인덱스 시작점, 붙여넣기 할 변수명, 붙일 인덱스 시작점, 몇개 복사할지) > 인덱스를 지정해서 배열 복사

import java.util.Arrays;
public class NumberArray2 {
public static void main(String[] args) {
int[] num = new int[10];
for(int i=0;i<num.length;i++)
num[i] = i;//0~10을 순차적으로 배열에 대입
for (int i = num.length - 1; i > 0; i--) {//피셔예이츠 셔플 알고리즘 사용
int j = (int)Math.floor(Math.random() * (i + 1));
int tmp = num[i];
num[i] = num[j];
num[j] = tmp;
}
System.out.println(Arrays.toString(num));//문자열로 출력됌
int len = 3;
String numStr = "";
int rnum = 0;
for(int i=0;i<len;i++)
{
numStr += num[i];//int와 String을 +하면 자동 형변환(String)
} //8 > 81 > 819 식으로 세자리 난수가 생성될 수 있음
rnum = Integer.parseInt(numStr);//int로 형변환해서
System.out.println(rnum);//819라는 숫자 출력
}
}
import java.util.Arrays;
import java.util.Scanner;
public class Test {
public static boolean chkArr(char[] chArr)//char배열의 객체 주소값이 들어가는것
{
for(int i=0;i<chArr.length-1;i++)
{
for(int j=i+1;j<chArr.length;j++)
{
if(chArr[i]==chArr[j])//중복이 있으면 false return
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int rnum = 0;
String rnumStr = "";
while(true)//난수를 생성해 중복이 있는동안
{
rnum = (int)(Math.random()*(999-100+1)+100); // (end-start+1)+start > 난수발생
rnumStr = String.valueOf(rnum);//int를 문자열로 변환
if(chkArr(rnumStr.toCharArray())) break;//문자열을 char배열로 변환
}
int len = rnumStr.length();
String inumStr;
int scnt=0, bcnt=0;
System.out.println(rnum);
while(true)
{
System.out.println("공격하세요.");
inumStr = sc.next();
for(int i=0;i<len;i++)
{
char ch = rnumStr.charAt(i);//i번째 수를 ch에 대입
int idx = inumStr.indexOf(ch);//인덱스에 존재하는 ch문자의 인덱스 > 존재 x면 -1
if(idx != -1)//strike와 ball이 있는지 확인해주는 코드
{
if(i==idx) scnt++;
else bcnt++;
}
}
if(scnt==0 && bcnt==0) System.out.println("out");//위에서 카운트 안됐으면
else if(scnt != len) System.out.println(scnt + " strike " + bcnt + " ball");//strike가 3개가 아니면
else
{
System.out.println("홈런");
break;
}
scnt = 0;
bcnt = 0;
}
sc.close();
}
}
다운로드에 Chapter5 연습문제.pdf 존재

for(int a : arr) {sum += a;}

int cnt = 0;
for(int[] a : arr) {
for(int b: a) {
total += b;
cnt++;
}
}
average = (float)(total/cnt); 로 했는데..
맞춘문제



아예 손도 못댄 문제 무슨 말인지 이해 x
String[] args 가 args라는 변수명에 문자열 배열이 있다는 의미인데, args.length는 우리가 컴파일할때 기본으로 0 으로 생성되고, 컴파일 시킬때 옆에 args배열에 들어갈 값을 입력하면 그 값을 가지고 실행이 된다는 의미이다.class Practice2 {
public static void main(String[] args) {
System.out.println("첫 번째 값 : " + args[0]);
System.out.println("두 번째 값 : " + args[1]);
}
}



int[] answer = { 1,4,4,3,1,4,4,2,1,3,2 };
int[] counter = new int[4];
for(int i=0; i < answer.length;i++) {
int a = answer[i];
System.out.print(a);
for(int j = 0; j < a; j++) {
System.out.print("*");
}
System.out.println();
}
for(int i=0; i < counter.length;i++) {
System.out.println();

문제의 출제 의도를 제대로 알지 못했어서..풀이보니까 내가 푼건 잘못된 코드
배열에 1이 3개니까 3하고 별 3세개 출력 /2가 2개 / 3이 2개 / 4가 4개
3 2 2 4
넣을 숫자에 -1 을 하면 대입하려는 인덱스 값이 되니까
answer배열에 있는 숫자의 개수가 몇개있는지 출력하는 것이니 1~4밖에 없으니까 counter에 0~4개를 차례로 넣고
answer배열에 있는 숫자에서 -1 하면 몇개인지 셀 수 있는 해당 인덱스에 딱 들어간다..
counter[0]++; 하면 0번째 값이 ++ 되는것코딩테스트할 때 자주 쓰이니까 알고리즘을 잘 이해해놓자
영어문장을 배열에 넣는다하면(알파벳 하나씩) 'a ' 를 0번째에 넣고싶으면 a-a처럼 빼주면 0번째 배열에 차례로 넣을 수 있다.


ㄹㅇ 무슨말인지 > 책에서 복잡하게 푼거라는데..

star를 result에 넣을것 > 규칙성 존재
result[j][] 와 star[][j] > 이렇게 규칙이 같고 result[j][star.length-1(3)-i] 와 star[i][j] 이 된것
하드코딩하면 3-i지만 조금 고급지게 하면 star.length-1인것이다.
result 행은 3에서 0으로 작아지고 있고, star 행은 0부터 순차적으로 커지고있다
어떻게 풀지..생각하지 말고 노가다로 하더라도 데이터를 뽑아서 이 안에서 규칙성을 찾아야 한다.!!

int보다 작은 자료형들을 연산하면 Integer로 자동 형변환된다.
나는 ch를 int로 형변환 시켜서 했는데 숫자로 비교할 때 -0 을 해주지 않아서 숫자로 넘어가지지 않았다.
숫자도 아스키코드로 값이 있는데, -a만 하고 -0 을 하지않아서 제대로 출력이 되지 않았던
문자열을 += 하지 않고 = 으로 받았더니 result안에 String이 한개씩만 출력됐다.


이중for문 쓰고 4중 for문 쓰면서 다했는데 처음에.. 생각해보니 어차피 열은 3개니까 3당연히 3번 더해지는것이였는데, 너무 복잡하게 생각한 나의 패착이다.
처음에 [0][0]인 100을 result [0][3] / [0][5] / [5][3] 에 100을 각각 넣어주고 for문으로 돌아간다.
두번째 [0][1] 인 100을 result [0][1] 몰라 뭐 이런순서로 더해서 배열에 넣는게 아니라 배열에 넣는것을 반복해서 += 해주는것이다.
반복문따라서 한번 해보기


맞춘문제
toCharArray > 배열을 char로 변경해주는
스펠링 하나하나가 각 배열에 들어있는것 t-0/e-1 식으로
String 생성자 중에 (char[] value) 로 매개변수로 char배열로 받는 형태가 있으면 가능하다
new String(question) 로
answer.trim > 좌우 공백을 없앨때 쓰는 메소드
String s = "H ell o" > String s1 = s.trim(); 하면 "Hello" 가 되는것이다. 공백이 없으면 그냥 없는대로 출력
웹상에서 회원가입을 할때 공백을 제거해주기 위해서 쓴다.
%n 과 \n의 기능은 같다. > 개행
피셔예이츠 셔플 알고리즘을 사용한
배열을 저렇게 저장해서 문제 맞추기도 가능해서 알고리즘 기억하려고 삽입해놨다.
모든 프로그램언어에서 공통적인 것, 중요한 개념
메소드 수행에 필요한 메모리가 제공되는 공간
밑이 막힌 상자, 위에 차곡차곡 쌓고, 꺼낼 때는 맨 위에 있는 것부터 차곡차곡 뺀다.
LIFO 형태 (Last In First Out) > 정처기에 나온 스택개념
java virtural Machin
메소드 영역(Method Area)
호출 스택(Call Stack)
메소드의 작업 공간
메소드가 호출되면 호출 스택에 메모리 할당, 종료되면 사용하던 메모리를 반환
힙(Heap)
메소드가 호출되면 수행에 필요한 메모리를 스택에 할당받는다.
메소드가 수행을 마치면 사용했던 메모리를 반환
호출 스택의 제일 위에 있는 메소드가 현재 실행중인 메소드, 나머지는 대기중인 상태
아래에 있는 메소드가 바로 위의 메소드를 호출한 메소드이다.

가장 위에있는게 현재 실행중인 메서드인것이다.