1. Trouver les nombres impairs :
public static boolean isOdd(int i){ return i % 2 == 1; }
La méthode ci-dessus peut-elle vraiment trouver tous les nombres impairs ?
A : Le problème des nombres négatifs n'est pas pris en compte. Si i est négatif, il est incorrect. Doit renvoyer i%2 == 0
2. Soustraction à virgule flottante
System.out.println(2.0-1.9);
A : Les types à virgule flottante simples float et double en Java ne peuvent pas être utilisés. Non seulement Java, mais aussi de nombreux autres langages de programmation ont ce problème. Dans la plupart des cas, les résultats du calcul sont précis, mais si vous essayez plusieurs fois (vous pouvez faire une boucle), vous pouvez commettre des erreurs comme celle ci-dessus. Bien sûr, il peut y avoir des problèmes avec l'addition, la soustraction, la multiplication et la division
Par exemple :
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);
En effet, certaines décimales avec un nombre limité de chiffres peuvent devenir des décimales infiniment récurrentes. en binaire. Les nombres à virgule flottante ne peuvent pas être représentés et la précision est compromise.
Solution :
1. Si vous souhaitez déterminer si a-b est égal à c, ou si a b est égal à c, vous pouvez utiliser
if(0.05+0.01-0.06 < 0.0000001) { }
2. Dans "Effective Java" Un principe mentionné dans ce livre est que float et double ne peuvent être utilisés que pour des calculs scientifiques ou techniques. Dans les calculs commerciaux, nous devons utiliser java.math.BigDecimal pour résoudre
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); }
La raison pour laquelle il devient un nombre négatif est que int déborde. Ici, changer <=END en
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 型肯定不相等