public class PersonTest {
public static void main(String[] args) {
Person kimcoding = new Person("김코딩", "프로그래머", 30);
Person nahacker = new Person("나해커", "해커", 32, true);
int age = kimcoding.getAge();
System.out.println("김코딩의 나이는 " + age + "살 입니다.");
}
}
class Person {
private String name;
private String occupation;
private int age;
private boolean isSingle;
Person(){
System.out.println("첫 번째 생성자");
};
Person(String name, String occupation, int age) {
this(name, occupation, age, false);
System.out.println("두 번째 생성자");
}
Person(String name, String occupation, int age, boolean isSingle) {
System.out.println("세 번째 생성자");
this.name = name;
this.occupation = occupation;
this.age = age;
this.isSingle = isSingle;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//출력 세번째생성자 두번째생성자 세번째 생성자 김코딩의 나이는 30입니다.
틀린것을 고르시오
PersonTest 의 main 메서드를 실행하면 가장 먼저 “두 번째 생성자"라는 문구가 출력된다. X(세번째생성자가 먼저 출력)
김코딩은 싱글이다. 싱글이 아님 false X
PersonTest 의 main 메서드를 실행하면 “세 번째 생성자"라는 문구가 두 번 출력된다. O
public class CozStudentsTest {
public static void main(String[] args) {
CozStudents cozStudents = new CozStudents();
cozStudents.averageAge = 29;
System.out.println("코드스테이츠 이번 기수 수강생들의 평균 나이는 " + cozStudents.averageAge + "살입니다.");
nextGeneration(cozStudents.averageAge);
System.out.println("최종적인 다음 기수 수강생들의 평균 나이는 " + cozStudents.averageAge + "살입니다.");
}
static void nextGeneration(int averageAge) {
averageAge = 30;
System.out.println("다음 기수 수강생들의 평균 나이는 " + averageAge + " 살입니다.");
}
}
class CozStudents {
int averageAge;
}
출력값 29 30 29
package com.codestates.coplit;
import java.util.Arrays;
public class Solution {
public int[] getEvenNumbers(int[] arr) {
// TODO: 짝수만 요소로 갖는 배열 리턴
//빈배열 만들기 - 배열요소 반복
//짝수구하기 - 빈배열에 해당조건요소넣기- 반환
int[] result = new int[0];
for (int i = 0; i < arr.length; i++){
if(arr[i]%2==0){ //짝수일때
result = Arrays.copyOf(result, result.length+1);
result[result.length -1] = arr[i];
}
}
return result;
}
}
배열문제 코플릿
getEvenNumbers
Arrays.copyOf: 배열을 복사하고 크기를 조절합니다.
Arrays.sort: 배열을 정렬합니다.
Arrays.binarySearch: 정렬된 배열에서 이진 검색을 수행합니다.
Arrays.fill: 배열의 모든 요소를 특정 값으로 채웁니다.
Arrays.equals: 두 배열이 동일한 내용을 가지고 있는지 비교합니다.
Arrays.toString: 배열을 문자열로 변환하여 출력합니다.
Arrays.asList: 배열을 List로 변환합니다.
- Arrays.copyOf:
- Arrays.copyOf 메서드는 Java에서 배열을 복사하고 동시에 새로운 배열을 생성하는 메서드입니다.
- 이 메서드를 사용하면 배열의 일부 또는 전체 내용을 복사하여 새로운 배열을 만들 수 있습니다.
- Arrays.copyOf를 사용하면 복사할 배열과 목표 길이(복사 후 배열의 길이)를 지정할 수 있으며, 자동으로 새로운 배열을 생성하고 복사된 데이터를 채웁니다.
- System.arraycopy:
- System.arraycopy는 배열 간의 데이터를 복사하는 데 사용되는 Java의 기본 메서드 중 하나입니다.
- 이 메서드는 배열의 데이터를 다른 배열로 복사할 때 사용됩니다. 이때 복사 시작 위치, 복사할 요소 수, 원본 배열, 대상 배열 등을 지정해야 합니다.
- System.arraycopy는 기존 배열을 복사할 대상 배열에 직접 복사하므로 새로운 배열을 자동으로 생성하지 않습니다.
Arrays.copyOf는 배열을 복사하여 새로운 배열을 생성하고 반환하는 반면,
System.arraycopy는 이미 존재하는 배열을 다른 배열로 직접 복사하는 데 사용
public class Solution {
public int[] addToBack(int[] arr, int el) {
// TODO: 배열맨뒤에 추가후 리턴
int[] newArr = new int[arr.length +1];
//기존 배열을 +1 확장한 새로운 정수 배열 생성
System.arraycopy(arr,0,newArr,0,arr.length);
//arr배열의 0부터 길이까지 newArr배열에 처음부터 복사
newArr[arr.length] = el; //배열의 맨 뒤에 요소 추가
return newArr;
}
}
14번
package com.codestates.coplit;
import java.util.*;
public class Solution {
public int[] getElementsUpTo(int[] arr, int n) {
// TODO: 주어진 인덱스 이전의 요소를 가진 새로운 배열
int[] newArr = new int[n];
if( n >= arr.length || n == 0 ) {
newArr = new int[0];
} else {
newArr = Arrays.copyOfRange(arr, 0, n );//from포함 to제외
}
return newArr;
}
}
15번
package com.codestates.coplit;
import java.util.*;
public class Solution {
public int[] getAllElementsButFirst(int[] arr) {
// TODO: 배열의 첫번째 요소를 제외한 배열 리턴
if( arr.length == 0){
return new int[]{};
}
int[] newArr = Arrays.copyOfRange(arr,1,arr.length);//정수형배열 복사
return newArr;
}
}
자꾸 빈배열 반환이 안돼서 오류파티였다...
원인은 길이가 정해진 새로운 배열을 생성해버려서 그런거였고
copyOfRange가 새배열을 복사생성해준다
배열타입 쓰는거 까먹지 말기
17번
package com.codestates.coplit;
import java.util.*;
public class Solution {
public int[] getAllElementsButNth(int[] arr, int n) {
// TODO: 해당 인덱스를 제외한 배열 리턴
// 담을 배열,인덱스 확인변수
if( arr.length <= n) {
return arr;
}
int[] newArr = new int[arr.length-1];
int j = 0;
for(int i=0; i < arr.length; i++){
if( i !=n){
newArr[j] =arr[i]; //반복요소 i를 새배열 j에 저장
j++;
}
}
return newArr;
}
}
복잡하다,,, 머리 터질뻔했다 다행히 아직은 안터졌다.
래퍼런스 코드 있는줄 몰랐는데,,,지금 알았따....ㅋ...ㅋㅋ
래퍼런스는 i == n 조건에 cotinue를 썼다
for (int i = 0; i < arr.length; i++) {
if (i == n) {
continue;
}
result[index] = arr[i];
index++;
}
18번
아 정규식 진짜 짜증난닼ㅋ큐ㅜㅜㅜㅠ🤕🤕🤕🤕🤕🤕🤕🤕🤕🤕🤕🤕
copyOfRange로 하려다가 일이 너무 커져서 포기했다ㅠ
왜 이러세요...
public class Solution {
public String createPhoneNumber(int[] arr) {
// TODO: 정수요소 배열을 입력받아 전화번호 형식의 문자열 리턴
String phnumber = Arrays.toString(arr).replaceAll("[^0-9]","");
if(arr.length == 8) {
phnumber = "(010)" + phnumber.replaceAll("(\\d{4})(\\d{4})","$1-$2");
} else {
phnumber = phnumber.replaceAll("(\\d{3})(\\d{4})(\\d{4})","($1)$2-$3");
}
return phnumber;
}
}
String replace(CharSequnce target, CharSequence replacement)
문자열만 변환가능
String replaceAll(String regex, String replacement)
정규식을 이용해서 변환가능
19번
public class Solution {
public int[] fibonacci(int num) {
// TODO:
int[] newArr = new int[num +1];
for(int i = 0; i <= num; i++ ){
if(i<=1){
newArr[i] = i; //0번째 1번째 값은 0,1
} else {
newArr[i] = newArr[i-1] + newArr[i-2];
}
} return newArr;
}
}
피보나치 어쩌구............ 문제는 18번이 더 번거로ㅓ웠다ㅠㅠ
근데 자꾸 괄호 안닫아서 오류나는게 어이없엉..