Je ne peux pas me demander pourquoi je ne peux pas écrire quelque chose comme ça: à imprimer: p> i moyenne, 3 code> pourrait être automatiquement en boîte dans un entier code>, qui pourrait être ibler code>.
Je sais, j'ai sélectionné le premier élément à être 0 code>, mais je suppose que c'est le cas commun et qu'il pourrait faciliter la comptage avec un tel pour la construction code>. P > p>
7 Réponses :
in pour (x: c) code> Syntaxe, c doit être un ibler code>; 3 code> n'est pas.
Vous pouvez faire
Ne pas répondre à ma question et votre boucle n'est pas meilleure que l'ancien style C.
vous iTERE sur des collections d'objets. et Integer est un seul objet il n'y a rien à parcourir. Cependant, vous pouvez simplement faire cela:
for(int i=0;i<number;i++)
Exactement ce à quoi je pensais. La seule utilisation d'un pour (int i: 3) code> boucle serait sauvegarder le programmateur 10 caractères et faire plus de travail dans la fin de l'arrière ().
en Java, le foreach La boucle seulement iTerate sur < forts> tableaux forts> ou collections qui implémentent le ITEREFER Interface, que le type wrapper Integer ne le fait pas. P>
Mais cela a du sens quand on y pense. Que fait "pour chaque entier I dans 3, faites-le" signifie? Combien d'entiers Si vous voulez imiter ce comportement, TheotherGuy 's La réponse va fonctionner, mais une boucle directe est probablement encore meilleure. P>
Nombre a des sous-classes non entières telles que Float et BigDecimal, il n'a donc pas de sens à implémenter des
+1 n'a pas pensé à des chiffres de cette façon. Bien sûr, je ne veux que des entiers (parlant mathématiquement)
Parce qu'un nombre n'est pas une plage. La conversion d'un nombre en une plage est ambiguë.
Rien ne vous empêche d'écrire une classe de plage que est em> ibler, par exemple Notez qu'avec une telle approche, vous pouvez facilement ajouter des fonctionnalités telles que la spécification de l'incrément , si la portée est inclusive des deux côtés, etc. p> p>
+1 pour la bonne réponse à My i> question: ambiguïté. Utiliser la solution de Matej. 10x pour le code.
C'est une sorte de stupide, mais vous pouvez écrire quelque chose comme ceci: si vous souhaitez une méthode d'importation statique: p> public class IterUtil {
public static Iterable<Integer> iter(int to) {
return new IntIterable(0, to);
}
public static Iterable<Integer> iter(int from, int to) {
return new IntIterable(from, to);
}
private static class IntIterable implements Iterable<Integer> {
private int start;
private int end;
private IntIterable(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public Iterator<Integer> iterator() {
return new Iterator<Integer>() {
private int actual = start;
@Override
public boolean hasNext() {
return actual != end;
}
@Override
public Integer next() {
int value = actual;
if (actual < end) {
actual++;
} else if (actual > end) {
actual--;
}
return value;
}
@Override
public void remove() {
// do nothing
}
};
}
}
}
pas stupide du tout. En utilisant cela dans mes tests maintenant, et regardez à quel point ils sont lisibles! 10x.
Oh, et c'est pour (int i: plage (1,3)) code> qui produit 1,2,3 code> (inclus)
Comme d'autres l'ont noté, Java pour chacun iTirate sur un tableau ou une collection. "3" n'est pas un tableau ou une collection, c'est une valeur unique. Si Java a permis à la construction que vous suggérez, la seule implémentation cohérente serait de "itérer" sur la valeur unique, 3. C'est-à-dire:
for (int i=0; i<=3; i=i+1)
Il suffit d'utiliser une boucle régulière. Ce
(pour INT I: N: N) ... code> n'est pas un idiome Java et essayant de chausse-pied, un autre style de langue va généralement vous courir en difficulté@Emil: "Pourquoi les chiffres de Java ne sont-ils pas iThables"? Mais laissez-moi reformuler: "Pourquoi les entiers Java ne sont-ils pas ihansables de sorte qu'ils puissent être utilisés dans une boucle pour chaque boucle".
Je pense que ce serait un ajout très sensible à la langue. Oui, ce serait un nouveau idiome mais est lisible (IMHO), moins sujet d'erreur (le traditionnel de répétitions de boucle
i code> 3 fois, par exemple) et pourrait probablement remplacer presque la moitié de la moitié de la boucle du monde . Si j'avais un nickel pour chaquepour (int j = 0; j erreur que j'ai faite ...