1. 홀수 찾기:
rree위 방법으로 정말 모든 홀수를 찾을 수 있을까요?
A: 음수의 문제는 고려되지 않습니다. i가 음수이면 잘못된 것입니다. i%2 == 0을 반환해야 합니다
2. 부동 소수점 빼기
public static boolean isOdd(int i){ return i % 2 == 1; }
A: Java의 단순 부동 소수점 유형 float 및 double은 작동할 수 없습니다. Java뿐만 아니라 다른 많은 프로그래밍 언어에도 이러한 문제가 있습니다. 대부분의 경우 계산된 결과는 정확하지만, 몇 번 시도하면(루프를 만들 수 있음) 위와 같은 오류가 발생할 수 있습니다. 물론 덧셈, 뺄셈, 곱셈, 나눗셈에 문제가 있을 수 있습니다.
예:
System.out.println(2.0-1.9);
자릿수가 제한된 일부 소수는 이진수에서 무한히 반복되는 소수가 될 수 있기 때문입니다. 부동소수점에서는 숫자를 표현할 수 없으며 정확도가 떨어집니다.
해결책:
1. a-b가 c와 같은지 또는 a+b가 c와 같은지 확인하려면
System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.out.println(123.3/100);
2를 사용하면 됩니다. "Effective Java"에서 이 책에서 언급하는 원칙은 float와 double은 과학적인 계산이나 공학적인 계산에만 사용할 수 있다는 것입니다. 상용 계산에서는
if(0.05+0.01-0.06 < 0.0000001) { }
3을 해결하려면 java.math.BigDecimal을 사용해야 합니다. . 무한 루프
System.out.println((new BigDecimal("2.0")).subtract( new BigDecimal("1.9")).doubleValue());
A: 여기서 무한 루프가 발생하는 이유는 i가 Integer.MAX_VALUE일 때 for 루프가 먼저 ++이고 i가 정수일 때 i가 <=END인지 확인하기 때문입니다. MAX_VALUE 다음 ++ , i 는 음수가 됩니다. 그래서 사이클이 계속됩니다. 4. 정확히 무엇이 반환되나요? A: false를 반환합니다. 이때 return true는 도달할 수 없는 문이므로 컴파일 단계에서 최적화되어 제거됩니다. 3. 인터뷰에서 접할 수 있는 몇 가지 트랩 질문을 공유해 보겠습니다. 코드를 살펴보세요: 출력 결과는 다음과 같습니다: A .컴파일 오류 B10.9 C.9 D 위 답변 중 정답이 없습니다. 실행 결과는 다음과 같습니다. ((a<5) ? 10.9) 연산자 정밀도를 기반으로 한 10.9java 자동 변환이 있기 때문입니다. 따라서 다음 9도 9.0이 됩니다. 그래서 D를 선택하세요. a 결과는 다음과 같습니다. str1.notequalsstr2 이는 StringBuffer가 equals 메서드를 재정의하지 않음을 보여줍니다. 결과는 다음과 같습니다. 다른 내용이 있으면 추가해 주시기 바랍니다. 참고: 1. http://blog.csdn.net/ol_beta/article/details/5598867 2. baidu.com/link?url=0UyDU42L7DXZitdydJMG3IIUDIf3xidFCRAObZAq6SHFCEaNnp2Oyuq1KVwBvmlR0UZGHSjD4f6A1yD0d65JL_ 3. http://bbs.csdn.net/topics/300023952 4. http://z466459262.iteye.com/blog/ 739300 요약 이 글의 내용이 모두의 공부나 업무에 조금이나마 도움이 되었으면 좋겠습니다. 소통하라는 메시지. Java의 일반적인 트랩 질문 및 답변과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!
음수가 되는 이유는 int가 오버플로되기 때문입니다. 여기서 <=END를 public static final int END = Integer.MAX_VALUE;
public static final int START = END - 2;
public static void main(String[] args) {
int count = 0;
for (int i = START; i <= END; i++)
count++;
System.out.println(count);
}
public static boolean decision() {
try {
return true;
} finally {
return false;
}
}
int a=5;
System.out.println("value is"+((a<5)? 10.9:9 ));
value is9.0
StringBuffer str1=new StringBuffer("123");
StringBuffer str2=new StringBuffer("123");
if(str1.equals(str2)){
System.out.println("str1.equalstr2");
}else{
System.out.println("str1.notequalstr2");
}
Float fa=new Float(0.9f);
Float fb=new Float(0.9f); //Float fb=new Float("0.9f");
Double db=new Double(0.9f);
if(fa==fb){ //false
System.out.println("fa==fb");
}else{
System.out.println("fa!=fb");
}
if(fa.equals(fb)){ //true
System.out.println("fa.equalfb");
}else{
System.out.println("fa!equalfb");
}
if(db.equals(fb)){ //false
System.out.println("db.equalfb");
}else{
System.out.println("db!equalfb");
}