Ich versuche zu verstehen binäre Suche Bug mit byte
Array, ich verstand das Konzept des Überlaufs, die bei der Berechnung der mid
Index auftritt.Verständnis binäre Suche Bug
public byte binarySearch(byte[] arr, byte low, byte high, byte value){
if(low>high){
return -1;
}
/* Line 1 */ byte overflow_mid = (byte) (((byte) (low + high))/2); // This line giving overflow behaviour
/* Line 2 */ byte mid = (byte) ((low + high)/2); // however this line doesn't, which is not what i expected
if(arr[mid]== value){
return mid;
}
if(arr[mid]>value){
return binarySearch(arr, low, (byte) (mid-1), value);
}
return binarySearch(arr, mid, high, value);
}
Meine Intuition: Aber wenn ich das gleiche Verhalten mit byte
Array simulieren wie folgt
Da niedrige und hohe Variablen vom Typ byte
sind, glaube ich es nicht eine explizite Umwandlung zu byte
müssen wieder während der Berechnung des Index Mitte in Zeile 2.
Dank
Warum 'Byte' für' low' und 'high' verwenden? Sie sind Indexwerte, keine Werte des Arrays, also benutze einfach 'int' und du solltest keine Überlaufprobleme haben, außerdem werden alle diese Dangcasts überflüssig. Array-Indexwerte werden trotzdem zu "int" heraufgestuft (siehe [JLS 15.13 Array-Zugriffsausdrücke] (https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.13).), also sparst du wirklich nichts. – Andreas
Ja, Sie haben absolut Recht, aber ich versuche, den Fehler zu verstehen, indem ich das Integer-Verhalten mit Byte-Index und Byte-Array simuliere, also erwarte ich, dass es abstürzt. Nur aus Neugier. –