2017-04-12 7 views
0

Ich habe ein paar Probleme mit meiner for-Schleife.Zählen, wie oft Byte-Überlauf in Java

Ich versuche zu zählen, wie oft Byte in einigen Grenzen überläuft, aber ich bin mir nicht sicher, wie ich den Wert von Byte zurücksetzen sollte und wie kann ich das for looping arbeiten, weil jetzt ein Problem hat, was ich kann ‚t finden:

public class OverflowedByte { 
    public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    int limit = scan.nextInt(); 
    int countOverflows = 0; 
    for (byte i = -128; i < limit; i++) {   
     if (i == Byte.MAX_VALUE) { 
      countOverflows++; 
      i = Byte.MIN_VALUE; 
      System.out.println(countOverflows);  
     } 
    } 
    } 
} 

Antwort

0

Es gibt zwei Probleme:

  • Sie sind Zurücksetzen Ihre Schleifenzählerwert. Es kommt also nie ans Limit!
  • Und selbst wenn Sie das nicht tun würden: Ihr Limit ist ein int; kein Byte. So ein Byte Zähler wird überlaufen (!) Vor Erreichen dieser Grenze (wenn das Limit größer ist als Byte.MAX_VALUE)!

Also: Sie müssen mit einem "int" -Zähler für Ihre Schleife arbeiten; und ein Bytewert für die Überlaufprüfung:

for (int i=0, j = -128; i < limit; i++, j++) { 
    if (j == Byte.MAX_VALUE) { 
     countOverflows++; 
     j = Byte.MIN_VALUE; 
     System.out.println(countOverflows); 
    } 
Verwandte Themen