1. Ungerade Zahlen finden:
public static boolean isOdd(int i){ return i % 2 == 1; }
Kann die obige Methode wirklich alle ungeraden Zahlen finden?
A: Das Problem der negativen Zahlen wird nicht berücksichtigt. Wenn i negativ ist, ist es falsch. Sollte i%2 == 0 zurückgeben
2. Gleitkommasubtraktion
System.out.println(2.0-1.9);
A: Die einfachen Gleitkommatypen float und double in Java können nicht betrieben werden. Nicht nur Java, sondern auch viele andere Programmiersprachen haben dieses Problem. In den meisten Fällen sind die Berechnungsergebnisse korrekt, aber wenn Sie es ein paar Mal versuchen (Sie können eine Schleife erstellen), können Sie Fehler wie die oben genannten machen. Natürlich kann es bei Addition, Subtraktion, Multiplikation und Division zu Problemen kommen.
Zum Beispiel:
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);
Dies liegt daran, dass einige Dezimalzahlen mit einer begrenzten Anzahl von Stellen zu unendlich wiederkehrenden Dezimalzahlen werden können Binärzahlen können nicht dargestellt werden und die Genauigkeit ist beeinträchtigt.
Lösung:
1. Wenn Sie feststellen möchten, ob a-b gleich c ist oder ob a+b gleich c ist, können Sie
if(0.05+0.01-0.06 < 0.0000001) { }
verwenden 2. In „Effektiv“ Ein im Buch „Java“ erwähntes Prinzip ist, dass Float und Double nur für wissenschaftliche Berechnungen oder technische Berechnungen verwendet werden können. In kommerziellen Berechnungen müssen wir java.math.BigDecimal verwenden, um
< zu lösen 🎜>System.out.println((new BigDecimal("2.0")).subtract( new BigDecimal("1.9")).doubleValue());
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); }
Der Grund, warum es eine negative Zahl wird, ist, dass int überläuft. Hier kann das Problem durch Ändern von <=END in
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"); }
fa!=fb fa.equalfb db!equalfb Float 型与Double 型肯定不相等