class FizzBuzz{
public static void main(String[] args){
for(int i = 1; i <= 100; ++i){
if(i % 3 == 0 && i % 5 == 0){
System.out.println("FizzBuzz");
}else if(i % 3 == 0){
System.out.println("Fizz");
}else if(i % 5 == 0){
System.out.println("Buzz");
}else{
System.out.println(i);
}
}
}
}
Derzeit scheint der kürzeste Java-Quellcode für FizzBuzz 96 Byte zu sein. Kürzen wir es, weil es eine große Sache ist (was?).
class FizzBuzz{
public static void main(String[] args){
for(int i = 1; i <= 100; ++i){
System.out.println(((i % 3 == 0 && i % 5 == 0) ? "FizzBuzz" : ((i % 5 == 0) ? "Buzz" : ((i % 3 == 0) ? "Fizz" : i + ""))));
}
}
}
Der Code ist bequem und leicht zu lesen, wenn Sie bei der Verwendung keinen Fehler machen. (Obwohl ich unterschiedliche Geschmäcker habe) Die oben genannte Verwendung ist jedoch in jeder Hinsicht übertrieben. Tun Sie dies daher nur, wenn Sie einen bestimmten Grund haben.
Dies ist eine Frage der reinen Idee oder nicht. Tägliches Training und Sinn sind wichtig. Ich denke, Sie sollten viel guten Code lesen und selbst viel Code schreiben.
class FizzBuzz{
public static void main(String[] args){
for(int i = 1; i <= 100; ++i){
System.out.println((i % 3 > 0 ? "" : "Fizz") + (i % 5 > 0 ? (i % 3 > 0 ? i + "" : "") : "Buzz"));
}
}
}
class FizzBuzz{
public static void main(String[] args){
for(int i = 1; i <= 100; ++i){
System.out.println((i % 3 > 0 ? "" : "Fizz") + (i % 5 > 0 ? (i % 3 > 0 ? i : "") : "Buzz"));
}
}
}
i +" "
zu String gezwungen
――Ah, ich habe String # valueOf
nicht verwendet, weil ich es für kurze Codierungszwecke geschrieben habe.class FizzBuzz{
public static void main(String[] args){
for(int i = 1; i <= 100; ++i)
System.out.println((i % 3 > 0 ? "" : "Fizz") + (i % 5 > 0 ? i % 3 > 0 ? i : "" : "Buzz"));
}
}
class FizzBuzz{
public static void main(String[] args){
for(int i = 0; ++i < 101;)
System.out.println((i % 3 > 0 ? "" : "Fizz") + (i % 5 > 0 ? i % 3 > 0 ? i : "" : "Buzz"));
}
}
<101
ausgewertet wird.<= 100
in <101
geändert, um es um 1b zu reduzieren.class F{public static void main(String[]a){for(int i=0;++i<101;)System.out.println((i%3>0?"":"Fizz")+(i%5>0?i%3>0?i:"":"Buzz"));}}
Entfernen Sie zusätzliche Leerzeichen und Zeilenumbrüche, um die Variable zu einem einzelnen Zeichen zu machen. Anständig? Diese 130 Bytes sind die Grenze im Quellcode. Vielleicht.
Ich habe eine Array-Deklaration dank Kurzcodierung
String[]a
Mir ist aufgefallen, dass ich schreiben kann, indem ich so zusammenhalte. Ebenfalls
String
[]
a
Es spielt keine Rolle, ob Sie es so zerlegen.
Nun, ich wähle und benutze das Array heutzutage nicht mehr alleine ...
Am Anfang habe ich gesagt, dass der kürzeste 96 Byte beträgt, im vorherigen Code jedoch 130 Byte. Tatsächlich ist es unter besonderen Bedingungen immer noch kürzer.
Es scheint, dass VMs bis zu einer bestimmten Version ein Problem haben und es möglich war, Zeichen ohne die Hauptmethode auszugeben. (Mit der aktuellen VM sollte nichts ohne die Hauptmethode funktionieren.)
class F{static{for(int i=0;++i<101;)System.out.println((i%3>0?"":"Fizz")+(i%5>0?i%3>0?i:"":"Buzz"));}}
Es wurden 102 Bytes. VMs bis zu einer bestimmten Version scheinen im statischen Initialisierer früher als in den ursprünglichen VM-Spezifikationen angegeben ausgeführt zu werden, und es scheint, dass sogar ein solcher Code ausgeführt wird. Für diesen Code ärgere ich mich, nachdem es FizzBuzz ausgeführt hat, dass es keine Hauptmethode gibt.
Ein statischer Initialisierer ist übrigens ein statisch deklarierter Codeblock, der beim Laden einer Klasse nur einmal ausgeführt wird. Bitte googeln Sie, wie man es benutzt.
enum F{A;{for(int i=0;++i<101;)System.out.println((i%3>0?"":"Fizz")+(i%5>0?i%3>0?i:"":"Buzz"));}}
Es wurden 97 Bytes.
enum
Lesen Sie am besten Effective Java 2nd Edition für Java. kein Zweifel. In Bezug auf den obigen Code werden die folgenden Eigenschaften verwendet.
--enum ist auch eine Art Klasse
Ein Instanzinitialisierer ist ein Codeblock, der beim Erstellen einer Instanz nur einmal ausgeführt wird. Wird vor dem Konstruktor aufgerufen. Bitte googeln Sie, wie man es benutzt. Ich glaube nicht, dass es viele Möglichkeiten gibt, es zu nutzen.
enum F{A;int i;{for(;++i<101;)System.out.println((i%3>0?"":"Fizz")+(i%5>0?i%3>0?i:"":"Buzz"));}}
Die letzte 1 Byte wurde mithilfe der Eigenschaft reduziert, dass das Feld einen Standardwert hat (int ist 0), sodass Sie nicht explizit 0 zuweisen müssen.
Durch kurze Codierung mit FizzBuzz
Ich konnte die Spezifikationen von lernen. Obwohl es FizzBuzz ist, kann man es nicht unterschätzen! !!
Recommended Posts