반응형

참고주소 : https://stackoverflow.com/questions/85190/how-does-the-java-for-each-loop-work

어떻게 자바의 'for each' 루프가 작동하나요?

다음을 고려할 때

List<String> someList = new ArrayList<String>();
// "monkey", "donkey", "skeleton key"를 someList에 추가
for (String item : someList) {
    System.out.println(item);
}

for each 문법을 사용하지 않고 for 루프처럼 똑같이 하려면 어떻게 해야할까요?


28개 답변 중 1개

for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
    String item = i.next();
    System.out.println(item);
}

루프에서 i.remove();를 사용할 필요가 있거나, 다른 방법으로 실제 iterator를 접근(수정)한다면 구문을 실제 iterator만 추론(읽기) 때문에 for ( : )를 사용할 수 없습니다.

Denis Bueno가 언급했듯이 이 코드는 Iterable 인터페이스를 구현하는 모든 개체에서 작동합니다.

또한 for (:) 관용구의 오른쪽이 Iterable 객체가 아닌 array(배열)인 경우 내부 코드는 int 인덱스 카운터를 사용하고 대신 array.length를 확인합니다. Java 언어 스펙을 참조하십시오.

반응형
반응형

출처

https://stackoverflow.com/questions/13297207/is-it-valid-to-compare-a-double-with-an-int-in-java

Java에서 double과 int를 비교하는 것이 유효합니까?

Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()

Utilities.getDistance는 double을 리턴하고 getAttackRange는 int를 리턴합니다. 위의 코드는 if 구문의 한 부분이고 이는 true가 되어야 합니다. 이 비교가 유효합니까?

감사합니다.

--

5개 답변중 1개의 답변만 추려냄.

예 유효합니다. 비교하기 전에 int를 double로 변환(promote)합니다.

JLS 섹션 5.6.2 (이진 숫자 변환) 의 링크에 있는 JLS 섹션 15.20.1 (숫자 비교 연산) 를 확인해 보세요.

뒷부분을 발췌하면

primitive의 넓은 타입의 변환은 다음 규칙에 의해 정의된 대로 두 피연산자에 변환이 적용됩니다.
* 만약 한 피연산자 type이 double이면 다른 하나는 double로 변환됩니다.
* ...

--

원본

https://github.com/SDRLurker/TIL/blob/master/scala/01/compare.md

반응형
반응형

출처 

http://stackoverflow.com/questions/7872846/how-to-read-from-standard-input-non-blocking

자바에서 표준 입력을 non-blocking으로 읽는 방법?

    long end=System.currentTimeMillis()+60*10;
    InputStreamReader fileInputStream=new InputStreamReader(System.in);
    BufferedReader bufferedReader=new BufferedReader(fileInputStream);
    try
    {
        while((System.currentTimeMillis()<end) && (bufferedReader.readLine()!=null))
        {

        }
        bufferedReader.close();
    }
    catch(java.io.IOException e)
    {
        e.printStackTrace();
    }

저는 600밀리초 안에 읽기 위해 위에처럼 시도하였습니다만 bufferedReader가 blocking되어 readline에서 읽기가 되지 않습니다. 제발 도와주세요.

----

5 개의 답변 중 1개의 답변만 추려냄.

역자주 : available() 메소드가 Java 1.5에는 없어서 ready() 메소드를 사용하여 문제를 해결하였습니다.

long end=System.currentTimeMillis()+60*10;
InputStreamReader fileInputStream = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(fileInputStream);
try {
    while ((System.currentTimeMillis() < end)) {
        if (bufferedReader.ready()) {
            System.out.println(bufferedReader.readLine());
        }
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (bufferedReader != null) {
            bufferedReader.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}


반응형

+ Recent posts