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, Boucles] Petit problème de logique

VIeRepublique
VIeRepublique
Niveau 20
27 janvier 2016 à 18:05:07

Bonsoir, j'ai créé un programme prenant en entrée une phrase et indique s'il y a des mots identiques ou pas,
si il fonctionnait bien, pour "Lol lel Lol", il devrait m'indiquer qu'il y a des mots identiques.

Voici mon programme :

public static void main(String[] args) 
{
    Scanner sc = new Scanner(System.in);
    String phrase ;
    System.out.println("Enter a sentence :");
    phrase = sc.nextLine();
    String[] T = phrase.split(" ");

    int i=0, o=0 ; //iterators

    boolean b=false; //redundancy condition

    for(String s : T)
    {
        System.out.println("T["+i+"] = "+ s);

        while(b)
        {
            if(o!=i)
            {

                if(s==T[o])
                {
                    b=true;
                }
            }
            o++;
        }
        i+=1;
    }

    if(b)   
    {
        System.out.println("There are identical words.");
    }
    else
    {
        System.out.println("There are no identical words.");
    }

}
Message édité le 27 janvier 2016 à 18:07:06 par VIeRepublique
VIeRepublique
VIeRepublique
Niveau 20
27 janvier 2016 à 18:20:35

J'aurais peut-être du le pisser en C, ça aurait peut être intéressé quelqu'un :snif: .

[Kakuzu]2
[Kakuzu]2
Niveau 34
27 janvier 2016 à 18:29:51

while(b) = tant que b est vrai or b est initialisé à false juste avant, donc tu passes jamais dans tes boucles.
si tu fais while(!b) ça marchera si il y a 2 mots identiques mais ça plantera si il n'y en a pas, car tu n'as pas de condition d'arrêt en dehors de ton while(!b) qui ne changera jamais.

edit : j'avais pas vu mais si tu compares 2 string en utilisant == tu compares la références des objets, utilise .equals pour avoir la valeur des string

Message édité le 27 janvier 2016 à 18:31:16 par [Kakuzu]2
VIeRepublique
VIeRepublique
Niveau 20
27 janvier 2016 à 18:57:07

Je pensais que pour String s0 = "baba", s1 ="baba" s0==s1 retournait vrai x) Pourtant je sais très bien que String est une classe en Java.

Sinon j'ai modifié en remplaçant s == T[o] par s.compareTo(T[o]) .


	public static void main(String[] args) 
	{
		Scanner sc = new Scanner(System.in);
		String phrase ;
		System.out.println("Veuillez entrer une phrase :");
		phrase = sc.nextLine();
		String[] T = phrase.split(" ");
		int i=0 ;
		boolean b=true;
		for(String s : T)
		{
			System.out.println("T["+i+"] = "+ s);
			int o = 0;
			while(!b && o<T.length)
			{
				if(o!=i)
				{
			
					if(s.compareTo(T[i])==0)
					{
						b=false;
					}
				}
				o+=1;
			}
			i+=1;
		}
		
		if(!b)	
		{
			System.out.println("Il y a des mots identiques.");
		}
		else
		{
			System.out.println("Il n'y pas de mots identiques.");
		}
		
	}
Message édité le 27 janvier 2016 à 19:01:09 par VIeRepublique
VIeRepublique
VIeRepublique
Niveau 20
27 janvier 2016 à 19:08:04

C'est bon ça fonctionne !

J'avais mis if(s.compareTo(T[i])==0) alors que c'est T à l'indice 0 qu'on compare avec s.

Merci Kakuzu

VIeRepublique
VIeRepublique
Niveau 20
27 janvier 2016 à 19:15:34

T à l'indice o* pardon

nikobelic
nikobelic
Niveau 10
30 janvier 2016 à 18:19:04

Personellement pour comparer des String, j’utiliserai tout le temps la methode .equals
En plus de ça t'as la méthode .equalsIgnoreCase qui est bien pratique et que tu devrais utiliser si j'ai bien compris ce que tu veux faire.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment