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);
}
}
}
}
Actuellement, le code source Java le plus court pour FizzBuzz semble être 96 octets . Raccourcissons-le parce que c'est un gros problème (quoi?).
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 + ""))));
}
}
}
Le code sera pratique et facile à lire si vous ne faites pas d'erreur en l'utilisant. (Bien que j'ai des goûts différents) Cependant, l'utilisation ci-dessus est exagérée par tous les moyens, alors ne le faites pas sauf si vous avez une raison spécifique.
C'est une question d'idée pure ou pas. La formation quotidienne et le sens sont importants. Je pense que vous devriez lire beaucoup de bon code et écrire beaucoup de code vous-même.
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"));
}
}
}
--Jusqu'à JLS 2nd Edition, les deuxième et troisième expressions de l'opérateur conditionnel devaient renvoyer le même type. ―― Donc, je le fais de force String par dextérité comme ʻi + "" `
String # valueOf
parce que je l'ai écrit à des fins de codage court.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
ne soit évalué.<= 100
est changé en <101
pour le réduire de 1b.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"));}}
Supprimez les espaces blancs supplémentaires et les sauts de ligne pour faire de la variable un seul caractère. Décent? Ces 130 octets sont la limite du code source. Peut-être.
J'ai une déclaration de tableau grâce à un codage court
String[]a
J'ai remarqué que je peux écrire en collant ensemble comme ça. Aussi
String
[]
a
Peu importe que vous le démontiez comme ça.
Eh bien, je ne choisis pas et n'utilise pas le tableau seul de nos jours ...
Au début, j'ai dit que le plus court était de 96 octets, mais dans le code précédent, il était de 130 octets. En fait, il est encore plus court avec des conditions spéciales.
Il semble que les VM jusqu'à une certaine version aient un problème, et il était possible de sortir des caractères sans la méthode principale. (Avec la VM actuelle, rien ne devrait fonctionner sans la méthode principale.)
class F{static{for(int i=0;++i<101;)System.out.println((i%3>0?"":"Fizz")+(i%5>0?i%3>0?i:"":"Buzz"));}}
Il est devenu 102 octets. Les VM jusqu'à une certaine version semblent s'exécuter dans l'initialiseur statique plus tôt que le timing spécifié dans les spécifications de VM d'origine, et il semble que même un tel code sera exécuté. Pour ce code, après l'exécution de FizzBuzz, je me fâche qu'il n'y ait pas de méthode principale.
À propos, un initialiseur statique est un bloc de code déclaré statique qui n'est exécuté qu'une seule fois lorsqu'une classe est chargée. S'il vous plaît google comment l'utiliser.
enum F{A;{for(int i=0;++i<101;)System.out.println((i%3>0?"":"Fizz")+(i%5>0?i%3>0?i:"":"Buzz"));}}
Il est devenu 97 octets.
enum
Il est préférable de lire l'énumération Effective Java 2nd Edition for Java. sans aucun doute. Concernant le code ci-dessus, il utilise les propriétés suivantes.
--enum est aussi un type de classe
Un initialiseur d'instance est un bloc de code qui ne s'exécute qu'une seule fois lorsqu'une instance est créée. Appelé avant le constructeur. S'il vous plaît google comment l'utiliser. Je ne pense pas qu'il existe de nombreuses possibilités de l'utiliser.
enum F{A;int i;{for(;++i<101;)System.out.println((i%3>0?"":"Fizz")+(i%5>0?i%3>0?i:"":"Buzz"));}}
Le dernier octet a été réduit en utilisant la propriété que le champ a une valeur par défaut (int est 0) afin que vous n'ayez pas à affecter explicitement 0.
Par codage court avec FizzBuzz
--Opérateur conditionnel
J'ai pu apprendre les spécifications de. Même s'il s'agit de FizzBuzz, vous ne pouvez pas le sous-estimer! !!
Recommended Posts