Alle möglichen Werte von int von der kleinsten zur größten, mit Java

7

Schreiben Sie ein Programm, um alle möglichen Werte des Datentyps int vom kleinsten zum größten mit Java auszugeben.

Einige bemerkenswerte Lösungen vom 8. Mai 2009, 10:44 GMT:

1) Daniel Lew war der Erste, der richtig funktionierender Code .

2) Kris hat die einfachste Lösung für das gegebene Problem.

3) Tom Hawtin - Tackline, kam wohl mit die eleganteste Lösung .

4) mmyers wies darauf hin, dass der Druck wahrscheinlich zu einem Engpass werden würde und kann durch Pufferung verbessert werden .

5) Jay's Brute-Force-Ansatz ist bemerkenswert, da der resultierende Quellcode nicht nur dem Kernpunkt der Programmierung trotzt, sondern auch etwa 128 GB benötigt und Compiler-Grenzen sprengen wird.

Als Nebenbemerkung glaube ich, dass die Antworten zeigen, dass es sich um eine gute Interviewfrage handeln könnte, solange nicht die Fähigkeit besteht, sich an Wissen über den Datentypenüberlauf und dessen Auswirkungen zu erinnern während des Komponententests), oder die Art und Weise, MAX- und MIN-Limits zu erhalten (kann leicht in der Dokumentation nachgeschlagen werden), sondern eher die Analyse verschiedener Arten des Umgangs mit dem Problem.

    
Vlad Gudim 07.05.2009, 16:15
quelle

13 Antworten

14
%Vor%

Bin ich angestellt?

    
Daniel Lew 07.05.2009 16:19
quelle
14

Einfachstes Formular (Mindestcode):

%Vor%

Kein Integer-Überlauf, keine zusätzlichen Überprüfungen (nur ein wenig mehr Speicherverbrauch, aber keine 32 Ersatz-Bits liegen herum).

Obwohl ich annehme

%Vor%

hat weniger Zeichen, ich kann nicht wirklich sagen, dass es einfacher ist . Kürzere ist nicht unbedingt einfacher, es hat jedoch weniger Code.

    
Kris 07.05.2009 16:52
quelle
8

Ich muss nur eine Antwort hinzufügen ...

%Vor%
  • Wir wollen nicht, dass sich der Körper wiederholt (denke an die Wartung!)
  • Es gibt keine Schleife für immer.
  • Es verwendet einen geeigneten Typ für den Zähler.
  • Es ist keine wilde Verrücktenbibliothek von Drittanbietern erforderlich.
Tom Hawtin - tackline 07.05.2009 17:13
quelle
4

Ah, und hier hatte ich gerade angefangen zu schreiben

%Vor%

Okay, geben Sie mir ein paar Wochen Zeit, um die Eingabe zu beenden ...

Die Anweisungen sagten nicht, dass ich eine Schleife verwenden muss, und zumindest hat diese Methode keine Überlaufprobleme.

    
Jay 07.05.2009 22:41
quelle
4

Gibt es etwas Schwieriges, das ich nicht erwische? Dort ist wahrscheinlich ... ( edit: ja, gibt es!)

%Vor%

Da der Druck der Flaschenhals ist, würde ein Puffer die Geschwindigkeit ziemlich verbessern (ich weiß, weil ich es gerade ausprobiert habe):

%Vor%

Außerdem wird diese Version tatsächlich enden (danke an Daniel Lew für den Hinweis, dass es tatsächlich etwas Schwieriges gab, das ich nicht erwischte).

Die Gesamtlaufzeit für diese Version (mit -Xmx512m) war 1:53. Das sind über 600000 Nummern / Sekunde; gar nicht so schlecht! Aber ich vermute, dass es langsamer gewesen wäre, wenn ich es nicht minimiert ausgeführt hätte.

    
Michael Myers 07.05.2009 16:22
quelle
3

Als ich das zum ersten Mal betrachtete, war meine erste Frage: "Wie definierst du das kleinste und das größte?" Für was ich dachte, war die offensichtlichste Definition ("kleinste" == "am nächsten zu 0") die Antwort wäre

%Vor%

Aber alle anderen scheinen "klein" als "minimal" und "groß" als "maximal" zu lesen     

Chris Dodd 07.05.2009 17:16
quelle
3

Komm schon Leute, sagte es mit Java. Es hieß nicht, ein int in der for-Schleife zu verwenden. : -)

%Vor%     
MrJacqes 07.05.2009 19:24
quelle
3

Eine andere Möglichkeit, jeden Wert mit einem int-Typ zu durchlaufen.

%Vor%     
Peter Lawrey 07.05.2009 19:31
quelle
2

Angesichts der Übersicht über die besten Antworten wurde mir klar, dass es uns an der Brute-Force-Abteilung fehlt. Jays Antwort ist nett, aber es wird nicht funktionieren. Im Namen der Wissenschaft präsentiere ich - Bozo Range:

%Vor%

Beachten Sie, dass Sie mindestens 4 GB RAM reservieren müssen, um dieses Programm ausführen zu können. (Möglicherweise 8 GB, wenn Sie auf einer 64-Bit-Maschine sind, die Sie wahrscheinlich benötigen, um dieses Programm tatsächlich auszuführen ...). Diese Analyse zählt nicht den Bloat, den die Integer-Klasse zu einem gegebenen int hinzufügt, noch die Größe des HashSet selbst.

    
Daniel Lew 08.05.2009 13:13
quelle
2

Der maximale Wert für int ist Integer.MAX_VALUE und das Minimum ist Integer.MIN_VALUE . Verwenden Sie eine Schleife, um alle zu drucken.

    
cd1 07.05.2009 16:19
quelle
1

Paket fj kommt von hier .

%Vor%     
Apocalisp 07.05.2009 16:29
quelle
0

Mit 1000 Zeilen / Sek. sind Sie in etwa 7 Wochen fertig. Sollten wir jetzt Kaffee bekommen?

    
Steve B. 07.05.2009 16:35
quelle
0

Verbessern Sie einfach den Ansatz von StringBuilder :

2 Threads + 2 Puffer (d. h. StringBuilder ): Die Grundidee ist, dass ein Thread einen Puffer füllt, während der andere Thread den Inhalt des anderen Puffers ablegt.

Offensichtlich läuft der "dumper" Thread immer langsamer als der "fill" Thread.

    
ATorras 07.05.2009 17:05
quelle

Tags und Links