CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

java boucle

tak9am5ura
tak9am5ura
Niveau 4
10 mars 2016 à 12:07:07

Bonjour,
J'ai une petite question qui serait comment le java interprete t il la boucle suivante :
for(String s: mots) System.out.println(" mots: "+s);

C'est bien la première fois que je tombe sur une boucle for de ce style la..

UnTrucDeOufOuf
UnTrucDeOufOuf
Niveau 7
10 mars 2016 à 13:01:08

C'est comme un foreach, ça parcoure les éléments d'un sous ensemble

http://php.net/manual/fr/control-structures.foreach.php
https://msdn.microsoft.coom/fr-fr/library/ttw7t8t6.aspx

for(String s: mots){ ... }
Donc la boucle for va parcourir chaque element à l'interieur de mot (tableau ou collection), et l'élément courrant sera contenu dans la variable s, de type String

katk
katk
Niveau 10
10 mars 2016 à 13:03:52

je voudrais pas dire de connerie parce que j'ai pas trop fait de java mais en tout cas en c++ c'est pour traverser un tableau, donc ta variable "mots" ca sera un tableau de string, et a chaque tour de boucle ca prendra la string suivante, c'est pareil que:
for(int i = 0; i != mots.size(); ++i) System.out.println(" mots: " + mots[i]);

tak9am5ura
tak9am5ura
Niveau 4
10 mars 2016 à 13:11:44

D'accord, et dans ce cas si dans le même exercice on a

mots= new Vector<String> ();
String mot;
while(st.hasMoreTokens()) {
mot=st.nextToken();
if (!mots.contains(mot)) mots.add(mot);
}

Pourquoi est ce que on a pas fait
if(!mots.hasMoreTokens(mot)) mot.push(mot);

Je ne comprends pas trop bien le principe de contains et add..

Merci de votre compréhension

UnTrucDeOufOuf
UnTrucDeOufOuf
Niveau 7
10 mars 2016 à 13:31:51

Je ne comprends pas trop bien le principe de contains et add..

contains() vérifie si le mot n'est pas déja présent ( vérification par adresse il me semble) et add l'ajoute.

À quoi correspond ton st ? je connais pas hasMoreTokens non plus

tak9am5ura
tak9am5ura
Niveau 4
10 mars 2016 à 14:11:41

st c'etait un Stringtokenizer d'une phrase passée en argument (genre Stringtokenizer st= new StringTokenizer(phrase,",.;:"), en gros cela fractionne la phrase des qu'il rencontre un signe de ponctuation.

TintinMage
TintinMage
Niveau 10
10 mars 2016 à 17:03:39

Le 10 mars 2016 à 12:07:07 tak9am5ura a écrit :
Bonjour,
J'ai une petite question qui serait comment le java interprete t il la boucle suivante :
for(String s: mots) System.out.println(" mots: "+s);

C'est bien la première fois que je tombe sur une boucle for de ce style la..

Avec Java8 tu peux utiliser les streams
mots.stream().forEach(System.out::println);
Ou encore
mots.forEach(System.out::println);

Par exemple si tu as une list<String> source et une autre list<String> destination et tu veux ajouter les Strings de source qui ne sont pas dans destination
source.stream().filter(s -> !destination.contains(s)).forEach(destination::add);
Le code est clair je pense, je filtre toutes les chaines de caractères qui ne sont pas dans destination et je les ajoute après

VIeRepublique
VIeRepublique
Niveau 20
10 mars 2016 à 21:29:57

Le 10 mars 2016 à 13:03:52 kaTk a écrit :
je voudrais pas dire de connerie parce que j'ai pas trop fait de java mais en tout cas en c++ c'est pour traverser un tableau, donc ta variable "mots" ca sera un tableau de string, et a chaque tour de boucle ca prendra la string suivante, c'est pareil que:
for(int i = 0; i != mots.size(); ++i) System.out.println(" mots: " + mots[i]);

Sauf qu'une notion existe entre le for simple et le foreach au niveau de la mutabilité. Tu ne peux pas modifier la variable contenu dans le tableau avec un foreach puisqu'en réalité il s'agit d'une copie.

tak9am5ura
tak9am5ura
Niveau 4
10 mars 2016 à 21:36:20

OK merci beaucoup pour toutes ces explications !

UnTrucDeOufOuf
UnTrucDeOufOuf
Niveau 7
10 mars 2016 à 21:52:46

Le 10 mars 2016 à 21:29:57 VIeRepublique a écrit :

Le 10 mars 2016 à 13:03:52 kaTk a écrit :
je voudrais pas dire de connerie parce que j'ai pas trop fait de java mais en tout cas en c++ c'est pour traverser un tableau, donc ta variable "mots" ca sera un tableau de string, et a chaque tour de boucle ca prendra la string suivante, c'est pareil que:
for(int i = 0; i != mots.size(); ++i) System.out.println(" mots: " + mots[i]);

Sauf qu'une notion existe entre le for simple et le foreach au niveau de la mutabilité. Tu ne peux pas modifier la variable contenu dans le tableau avec un foreach puisqu'en réalité il s'agit d'une copie.

Je viens de faire le test, la modification fonctionne :

http://pastebin.com/jWdL4Yui :(

UnTrucDeOufOuf
UnTrucDeOufOuf
Niveau 7
10 mars 2016 à 21:56:38

Ah ok, ça fonctionne avec les objets mais pas avec les tableaux de primitives, je viens de tester avec un tableau de String et ça ne modifie pas la valeur :oui:

VIeRepublique
VIeRepublique
Niveau 20
12 mars 2016 à 13:15:28

String n'est pas une variable primitive mais un objet immutable comme les Integer, Double, Float, etc... (à ne pas confondre avec int, double, float avec minuscules).

Pour savoir si un objet est mutable, fais un print de l'objet, s'il affiche la référence (ça ressemble à une adresse) il sera mutable, il n'y a qu'avec ArrayList où j'ai un doute.

VIeRepublique
VIeRepublique
Niveau 20
12 mars 2016 à 13:30:43

UnTrucDe..:
toi tu as modifié l'attribu des objets pointés par les copies des références des objets dans ton foreach.
En clair quand tu fais Obj o = new Obj(); tu alloues un espace mémoire pour o et tu lui affectes une référence (ex: Obj@fe5ad0a), donc si tu fais une copie de o disons o2, o2 et o pointeront vers le même objet (o == o2).

Par contre pour revenir au foreach, si tu veux faire o = null; (déréférenciation) ça ne touchera que des copies et non les variables du tableau.

RogerLeCaillou
RogerLeCaillou
Niveau 10
12 mars 2016 à 16:02:28

Le 10 mars 2016 à 13:03:52 kaTk a écrit :
je voudrais pas dire de connerie parce que j'ai pas trop fait de java mais en tout cas en c++ c'est pour traverser un tableau, donc ta variable "mots" ca sera un tableau de string, et a chaque tour de boucle ca prendra la string suivante, c'est pareil que:
for(int i = 0; i != mots.size(); ++i) System.out.println(" mots: " + mots[i]);

C'est pas pareil dans le sens où sous le capot on a un Iterator, pas une boucle basée sur la longueur du tableau.

Le 10 mars 2016 à 17:03:39 TintinMage a écrit :

Le 10 mars 2016 à 12:07:07 tak9am5ura a écrit :
Bonjour,
J'ai une petite question qui serait comment le java interprete t il la boucle suivante :
for(String s: mots) System.out.println(" mots: "+s);

C'est bien la première fois que je tombe sur une boucle for de ce style la..

Avec Java8 tu peux utiliser les streams
mots.stream().forEach(System.out::println);
Ou encore
mots.forEach(System.out::println);

Par exemple si tu as une list<String> source et une autre list<String> destination et tu veux ajouter les Strings de source qui ne sont pas dans destination
source.stream().filter(s -> !destination.contains(s)).forEach(destination::add);
Le code est clair je pense, je filtre toutes les chaines de caractères qui ne sont pas dans destination et je les ajoute après

En quoi ça répond à la question de l'auteur ? :hap:

TintinMage
TintinMage
Niveau 10
12 mars 2016 à 21:43:36

Le 12 mars 2016 à 16:02:28 RogerLeCaillou a écrit :

Le 10 mars 2016 à 13:03:52 kaTk a écrit :
je voudrais pas dire de connerie parce que j'ai pas trop fait de java mais en tout cas en c++ c'est pour traverser un tableau, donc ta variable "mots" ca sera un tableau de string, et a chaque tour de boucle ca prendra la string suivante, c'est pareil que:
for(int i = 0; i != mots.size(); ++i) System.out.println(" mots: " + mots[i]);

C'est pas pareil dans le sens où sous le capot on a un Iterator, pas une boucle basée sur la longueur du tableau.

Le 10 mars 2016 à 17:03:39 TintinMage a écrit :

Le 10 mars 2016 à 12:07:07 tak9am5ura a écrit :
Bonjour,
J'ai une petite question qui serait comment le java interprete t il la boucle suivante :
for(String s: mots) System.out.println(" mots: "+s);

C'est bien la première fois que je tombe sur une boucle for de ce style la..

Avec Java8 tu peux utiliser les streams
mots.stream().forEach(System.out::println);
Ou encore
mots.forEach(System.out::println);

Par exemple si tu as une list<String> source et une autre list<String> destination et tu veux ajouter les Strings de source qui ne sont pas dans destination
source.stream().filter(s -> !destination.contains(s)).forEach(destination::add);
Le code est clair je pense, je filtre toutes les chaines de caractères qui ne sont pas dans destination et je les ajoute après

En quoi ça répond à la question de l'auteur ? :hap:

C'est pas une réponse mais une information

Message édité le 12 mars 2016 à 21:44:07 par TintinMage
Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment