Math.random() Random
- static 함수
- seed 값이 현재시간으로 고정
- 실행 시킬 때마다 계속 다른 난수 발생
- java.util 클래스
- seed 값 고정 가능

Random 함수는 seed를 100으로 고정 후 같은 코드를 2번 실행 후 캡처 한 결과

Random함수의 결과는 첫 번째 결과와 두 번째 결과가 값이 같았다.
그러나 Math.random()의 결과는 실행 할 때마다 결과가 달라졌다.

리얼한 무작위 난수를 뽑아내고 싶다면 Math.random() 함수를 사용하거나 Random 함수에서 seed값을 제거 후 사용하면 random함수에서도 무작위 난수가 뽑힌다.

Posted by 知彼知己百戰不殆
,

Scanner객체에서 입력을 받기도 전에 입력한게 없다는 오류가 떨어지며 프로그램 종료. 혹시 개행 문자가 남은 건 아닐까 해서 봤지만 제일 위에 Scanner객체를 새로 생성 후 처음으로 받는 readLine()이었다.

Scanner 사용 시 NoSuchElementException 오류.
이해가 안 가 구글링.

답은 sc.close()

해당 class에는 없었지만 이 class를 호출하는 다른 class에서 이미 close를 해버려서 stream을 닫아버렸으므로 다시 stream은 열리지 않음.

예전에 공부할 땐 언뜻 스쳐지나갔는데, 오늘 다시 검색해본 김에 정리.

 

Posted by 知彼知己百戰不殆
,

'언어 > 알고리즘' 카테고리의 다른 글

Arrays.binarySearch 함수  (0) 2020.09.12
Posted by 知彼知己百戰不殆
,

"사용하기 전에 반드시 인자로 사용되는 배열을 sort 할 것"

탐욕법(Greedy) 문제를 풀다가 배열에 원하는 값이 들어있는지 확인하기 위해

Arrays.binarySearch 함수를 사용하였다. API설명은 제대로 보질 않고 indexOf와 같은 건 줄 알았다.

그러나 계속 테스트케이스에서 걸렸고, 다른 사람 코드를 봤는데 나랑 다를 바가 없어서 정말 이해가 안 됐다.

그래서 조건을 이것저것 바꿔보며 한 줄 한 줄 무식하게 디버깅을 시작했다. 

그런데 당연히 잘 돌아갈거라고 예상했던 binarySearch에서 예상과 다른 결과를 return했었다.

그래서 구글링을 한 결과 binarySearch 전에는 반드시 sort 해놔야 함. 그래서 API 설명을 봤는데 두 번째 줄에 그대로 적혀 있었음... 그리고 그럼 나랑 정말 비슷하게 짠 다른 사람 코드는 어떻게 돌아간거지 하고 다시 봤더니 Arrays.sort로 미리 해놓고 진행했음.

오늘의 결론
1. 아는 만큼 보인다
2. 소스는 거짓말하지 않는다
3. 보고 싶은대로 본다

'언어 > 알고리즘' 카테고리의 다른 글

Java Sort Collection  (0) 2021.03.15
Posted by 知彼知己百戰不殆
,

Java 11
·String name = "dlsfjkd"; 이런 것처럼 명시적으로 타입이 string인 경우, var name = "dfjlsjl"; 이렇게 var를 사용하여 코딩이 가능하다.

Java 7
·try-catch-Resource 추가

Posted by 知彼知己百戰不殆
,
public class Main {
	public static void main(String[] args) {
		System.out.println("=================생성자테스트=================");
        Child c1 = new Child();
        Child c2 = new Child("1");
        
        System.out.println("====================생성자테스트2=================");
        Parent p1 = new Child();
        Parent p2 = new Child("2");
        
        System.out.println("====================생성자테스트3=================");
        GrandParents gp1 = new Child();
        GrandParents gp2 = new Child("3");
        
        System.out.println("=================상속 중복 정의 테스트==================");
        
        Child c3 = new Child();
        System.out.println("c3 str = " + c3.pStr);
        
        Child c4 = new Child("4");
        System.out.println("c4 str = " + c4.pStr);
        
        Parent p3 = new Child();
        System.out.println("p3 str = " + p3.pStr);

        Parent p4 = new Child("5");
        System.out.println("p4 str = " + p4.pStr);
        
        GrandParents g1 = new Child();
        System.out.println("g1 str = " + g1.pStr);

        GrandParents g2 = new Child("6");
        System.out.println("g2 str = " + g2.pStr);
        
        GrandParents g3 = new Parent();
        System.out.println("g3 str = " + g3.pStr);

        GrandParents g4 = new Parent("7");
        System.out.println("g4 str = " + g4.pStr);

        GrandParents g5 = new GrandParents();
        System.out.println("g5 str = " + g5.pStr);

        GrandParents g6 = new GrandParents("8");
        System.out.println("g6 str = " + g6.pStr);
	}
}

class GrandParents {
    String pStr = "grand parents";
    
    GrandParents() {
        System.out.println("GrandParents()");
    }
    GrandParents(String str) {
        System.out.println("GrandParents str생성자");
    }
}
 
class Parent extends GrandParents {
    String pStr = "parents";
    
    Parent(){
        System.out.println("Parent 생성자");
    }
    Parent(String str){
        System.out.println("Parent str생성자");
    }
}
 
class Child extends Parent{
    String pStr = "child";
    
    Child(){
        System.out.println("Child 생성자");
    }
    Child(String str){
        System.out.println("Child str생성자");
    }
}

 

생성자와 변수 데이터는 메소드 오버라이딩과 결과가 조금 달랐다.

메소드 오버라이딩은 자식 클래스에 오버라이딩이 돼 있으면 부모 클래스에서 같은 메소드명을 호출해도 자식 클래스의 메소드를 우선 호출했다. 하지만 생성자와 변수 데이터는 변수 타입을 많이 따라간다는 생각이 들었다.

Posted by 知彼知己百戰不殆
,

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        String int_rate = "2.2596";
        
        System.out.println("[D] int_rate = " + int_rate);
        
        //반올림 하는
        System.out.println("[D] String double Round1 = " + Double.parseDouble(int_rate)*1000);
        System.out.println("[D] String double Round2 = " + Double.parseDouble(int_rate)*1000/1000.0);
        System.out.println("[D] String double Round3 = " + Math.round(Double.parseDouble(int_rate)*1000/1000.0));
        
        int_rate = String.format("%.2f" , Float.parseFloat(int_rate) );
        System.out.println("[D] String double Round4 = " + int_rate);
        
        int_rate = Double.toString(Math.round(Double.parseDouble(int_rate)*1000/1000.0));
        System.out.println("[D] 2.259 Rounding up = " + int_rate);
        
        Double add_rate = 3.141592;
        add_rate = Math.round(add_rate*1000)/1000.0;
        System.out.println("[D] 3.141592 Rounding up = " + add_rate);
        
cs

 

String.format을 사용할 때 

String.format("%.2f" + Float.parseFloat(~~); 이렇게도 사용하니 

Exception in thread "main" java.util.MissingFormatArgumentException: Format specifier '%.2f' 라는 에러가 나왔다.

파라미터를 찾을 수 없다는 에러. 그래서 ","로 수정하니 잘 됨.

 

14번 line은 double형을 바로 round함수에 넣으면 제대로 출력이 되는데, String을 parseDouble로 변환하고 다시 String으로 변환하니 값이 짤려서 나온다. 실수값이 들어가 있는 String변수는 StringFormat을 써야함!!

Posted by 知彼知己百戰不殆
,

이클립스 주석 색깔 변경

Eclipse preference -> Java -> Editor -> Syntax Coloring

 

Posted by 知彼知己百戰不殆
,

1. 공통점

==, compare, equals 메소드 모두 문자열 비교가 가능함.

 

2. 차이점

== 연산자: 내용과 객체까지 같은지 비교. 

즉, 객체로 저장된 String과 상수 String을 ==연산자로 비교한 값을 확인해 보면 false로 나온다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public static void main(String[] args) {
 
        String str1 = "abc";
        
        System.out.println("[variable] str1 == \"abc\" ▶︎▶︎▶︎ " + (str1 == "abc") );
        System.out.println("[variable] str1.equals(\"abc\") ▶︎▶︎▶︎ " + str1.equals("abc") );
        System.out.println("[variable] str1.compareTo(\"abc\") == 0 ▶︎▶▶︎︎ " + (str1.compareTo("abc")==0) );
        System.out.println();
        
        String str2 = new String("abc");
        System.out.println("[object] str2 == \"abc\" ▶︎▶︎▶︎ " + (str2 == "abc") );
        System.out.println("[object] str2.equals(\"abc\") ▶︎▶︎▶︎ " + str2.equals("abc") );
        System.out.println("[object] str2.compareTo(\"abc\") == 0 ▶︎▶︎▶︎ " + (str2.compareTo("abc")==0) );
        System.out.println();
 
        
        String [] str3 = new String [1];
        str3[0= "abc";
        System.out.println("[object] str3[0] == \"abc\" ▶︎▶︎▶︎ " + (str3[0== "abc") );
        System.out.println("[object] str3[0].equals(\"abc\") ▶︎▶︎▶︎ " + str3[0].equals("abc") );
        System.out.println("[object] str3[0].compareTo(\"abc\") == 0 ▶︎▶︎▶︎ " + (str3[0].compareTo("abc")==0) );
        
        System.out.println("========================================================");
        System.out.println("[DEBUG] str3[0] ▶︎▶︎▶︎ " + str3[0]);
        System.out.println("[DEBUG] str3 ▶︎▶︎▶︎ " + str3);
    }
cs

 

 

코드 실행 결과

Posted by 知彼知己百戰不殆
,

http://verysimple.org/wiki/moin.cgi/CategoryMac?highlight=%28%5CbCategoryCategory%5Cb%29

objective-C 참고 사이트

Posted by 知彼知己百戰不殆
,