2009-03-16 5 views
0

Gibt es etwas, das ich verwenden kann, um zu sehen, ob eine Zahl mit der gleichen Ziffer beginnt wie eine andere? Bsp. 5643 und 5377 beginnen beide mit fünf.Java-Nummernvergleich

Gibt es eine Möglichkeit, dies mit Zahlen zu tun oder müssen sie Strings sein? (? Starts)

+0

Möchten Sie sagen, dass "56" und "5213456" mit der gleichen Ziffer beginnen, oder nicht? –

+0

Möchten Sie die Verwendung von Strings aus irgendeinem abstrakten Grund vermeiden oder gibt es einen wirklichen Grund, sie zu vermeiden? – DJClayworth

+0

Beginnen "50" und "-5" mit der gleichen Ziffer? – DJClayworth

Antwort

7

Ich n1 und n2 sind Ihre Zahlen:

return (n1.toString().charAt(0) == n2.toString().charAt(0)); 

Sie müssen Integer verwenden nicht int, da int keine .toString() -Methode hat.

Wenn n1 ein int ist, könnten Sie new Integer (n1) .toString() verwenden.

Oder noch besser (vorgeschlagen von Bombe):

String.valueOf(n1).charAt(0) == String.valueOf(n2).charAt(0) 
+0

+1 Das ist die Verwendung von Zeichenfolgen – Perchik

+0

Sie könnten auch "String.valueOf (n1). CharAt (0) == String.valueOf (n2). CharAt (0)" verwenden. Auf diese Weise können Sie alle gewünschten Typen verwenden. Es würde sogar mit Doppel funktionieren. – Bombe

+0

Danke. Ich ändere das :) – Burkhard

1

Recurse Teilungs von zehn bis die ganze Division weniger als zehn, dann wird diese Zahl ist die erste, und Sie können Zahlen vergleichen.

1

Sie könnten die erste Ziffer berechnen:

public int getFirstDigit(int number) { 
    while (number >= 10) { 
     number /= 10; 
    } 
    return number; 
} 

(. Dies funktioniert nur für positive Zahlen)

Aber dann wieder konnte man nur das erste Zeichen der String-Darstellungen vergleichen. Der String-Vergleich ist möglicherweise langsamer, aber da es Ihr Problem ist, "das erste Zeichen der String-Repräsentation zu erhalten", könnte es sich um die passende Lösung handeln. :)

1

Der einfachste Ansatz (unter Berücksichtigung verschiedener Längenwerte) wäre wahrscheinlich genauso, wie Sie es gesagt haben, wandeln Sie beide in Strings um.

int x = 5643; 
int y = 5377; 
String sx, sy; 

sx = "" + x;  // Converts int 5643 to String "5643" 
sy = "" + y; 

boolean match = (sx.charAt(0) == sy.charAt(0)); 
+0

Ich glaube nicht, dass Sie sx tun können. [0] in Java. Das riecht für mich nach einem C# -Immus. –

+0

@Paul: Danke, ich habe in letzter Zeit viel C++ geschrieben. :) –

+0

Downvotes sind viel effektiver, wenn sie von Kommentaren begleitet werden. –

1
public static byte firstDigit(int number) { 
    while (true) { 
     int temp = number/10; 

     if (temp == 0) { 
     return (byte) Math.abs(number); 
     } 

     number = temp; 
    } 
1

(int) (a/10 ** (int) Math.log10 (a))

Wahrscheinlich weniger effizient als die String-Lösung, aber kein Looping und es hält uns in der "Numerischer" Bereich

(Denken Sie immer daran, dass, wenn Sie über die Anzahl der Ziffern in einer Reihe sprechen, log10 ist dein Freund)

wird auch nicht für negative Zahlen arbeiten Nehmen einen Absolutwert eines ersten.

-1

Für ints, int n1 und int n2;

return ("" + n1).charAt(0) == ("" + n2).charAt(0); 
+1

String.valueOf (n1) ist klarer als eine Verkettung. – Nicolas

+0

kann es sein, aber was ist mit dem negativen? "" + n1 ist eine der Möglichkeiten, ein int n1 in einen String zu konvertieren, und es funktioniert. Ich vermutete, dass Downvote für Antworten, die entweder falsch oder nicht nützlich sind. Und meine ist keine falsche Antwort. Ein Downvote kann andere in die Irre führen, dass "" + n1 überhaupt nicht funktioniert. –