So habe ich einige Code,Debugging Java-for-Schleife, die zu oft läuft
public static int getNumberAtDigit(int source, int digit)
{
if(digit > getSize(source))
throw new IndexOutOfBoundsException(
"There aren't " + String.valueOf(digit) + " digits in " + String.valueOf(source) + ".");
else
{
// Remove digits that come after what we want
for(int i = getSize(source); i > digit; i--)
source = (int) Math.floor(digit/10);
//Narrow it to only the last digit and return it
return source % 10;
}
}
public static int getSize(long d)
{
String numberS = String.valueOf(d);
return numberS.length();
}
und wenn ich System.out.println(getNumberAtDigit(4532, 3));
führen Sie es 0 zurück, aber wenn ich System.out.println(getNumberAtDigit(4532, 4));
laufen es gibt 2, wie es sollte. Ich habe getestet und weiß, dass die Methode getSize(long d)
nicht der Schuldige ist und normal funktioniert. Ich glaube, dass die for-Schleife zu oft läuft, aber es nicht herausfinden kann. Was mache ich falsch?
Warum nicht einfach 'digit/10' anstelle von' (int) Math.floor (digit/10) '? – MikeCAT
Beachten Sie auch, dass das, was in 'source' eingegeben wird, und der Schleifenzähler' i' nicht zur Rückgabe führt, es sei denn, digit = = getSize (source) ': nur' digit' bestimmt, was für 'digit
MikeCAT
Um sicherzustellen, dass es nicht aufrundet, wenn es teilt, aber seit Sie kommentiert, dass ich davon ausgehe, dass es automatisch abrundet. – Pyrrhic