Aide code java simple

Résolu/Fermé
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 - 16 nov. 2012 à 20:31
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 - 17 nov. 2012 à 17:11
Bonjour,
je suis débutant en programmation JAVA et j'aimerai créer un programme qui me dirait si le mot ou texte entré est un palindrome ou non.
J'ai déjà ceci :

public class exercice1
{

/*Écrire un script qui demande de rentrée un mot et indique si ce mot est un palindrome.*/

public static void main(String[] args)
{
StringBuffer texte = new StringBuffer();
StringBuffer texte1;
StringBuffer texte = texte1;
texte.reverse();
System.out.println(texte);
if (texte.equals(texte1));
{
System.out.println("Ce mot ou texte est un palindrome");
}
else
{
System.out.println("Ce mot ou texte n'est pas un palindrome");
}
}
}

En fait le but de ce programme c'est demander à l'utilisateur d'entrer un mot ou un texte.
Le programme va dupliquer cette chaine de caractère pour la comparer avant et après le "reverse".

Seulement, à la ligne "StringBuffer texte = texte1;" j'ai une erreur "Duplicate locale variable texte"
et pour le else ça me met "Syntax error on token "else", delete this token".

Je n'arrive pas à résoudre ces problèmes, si quelqu'un pouvait m'aider....merci.
A voir également:

3 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 nov. 2012 à 20:51
"Duplicate locale variable texte"
Tu as deux variables qui portent le nom texte :

StringBuffer texte = new StringBuffer();
StringBuffer texte1;
StringBuffer texte = texte1;


"Syntax error on token "else", delete this token".
C'est parce que tu as mis un ; après ton if, le compilateur considère que le if s'arrête ici, tout ce qui suit est indépendant, et le else n'a aucun sens.

if (texte.equals(texte1)) // ne mets pas de point-virgule ici !
1
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 6
16 nov. 2012 à 21:00
D'accord, mais j'aimerai donner la "valeur" (si je puis dire) "texte1" à mon "texte", différencier le "texte" (avant l'inversion) du "texte1" (après l'inversion), je sais pas si c'est clair...
Merci pour le if, ça marche bien :)
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 nov. 2012 à 21:07
Je doute que l'utilisation de la méthode reverse de StringBuilder soit autorisée pour ton exercice...

public static void main(String[] args)
{
    StringBuffer texte = new StringBuffer("texte");
    StringBuffer reverse = texte.reverse();

    if (texte.equals(reverse))
        System.out.println("Ce mot ou texte est un palindrome");
    else
        System.out.println("Ce mot ou texte n'est pas un palindrome");
}
0
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 6
Modifié par Vitaldix le 16/11/2012 à 21:25
En fait, je ne vois pas d'autre méthode pour le faire donc je suis bien obligé...

Ca y est, grâce à toi je n'ai plus ce problème de duplicate, et j'ai compris l'erreur, merci ! :)
par contre maintenant mon programme ne me demande plus de saisir de texte ou de mot, je ne sais que le faire avec des String, et quand j'essaie ça ne veut pas marcher avec reverse...

Merci beaucoup en tous cas
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 nov. 2012 à 21:31
"mon programme ne me demande plus de saisir de texte"
il ne l'a jamais demandé !

"ça ne veut pas marcher avec reverse..."
ça n'a aucun rapport avec reverse, mais avec texte.

Soit tu utilises args, soit il te faut manipuler System.in (avec un Scanner par exemple)
0
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 6
16 nov. 2012 à 21:34
Vicieux :D
je vais essayer ça, sinon je vais essayer une autre méthode, en comparant le premier caractère avec le dernier, le deuxième avec l'avant dernier et ainsi de suite...
merci pour ton aide en tous cas
0
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 6
17 nov. 2012 à 10:33
Bonjour,
j'ai recommencé le code à 0 et j'ai fais un truc tout à fait différent.

Le voilà :
import java.util.Scanner;
public class exercice1
{
public static void main (String [] args)
{

Scanner m = new Scanner(System.in);
System.out.println("Entrez votre mot");
String palin = m.nextLine();
String texte1 = palin;
String textemaj = texte1.toLowerCase();
System.out.println(textemaj);
String texte = textemaj.trim();
int longueur = texte.length();
System.out.println(longueur);

String moitie = texte.substring(0,longueur/2);
System.out.println(moitie);

/*String demi2 = texte;
String moitie2 = texte.substring(longueur, longueur/2);
System.out.println(moitie2);*/

for (int i=longueur;i<longueur/2; i--)
{
i=i+i;
String demi2 = "" +i;
if (demi2.equals(moitie))
{
System.out.println("Ce mot ou texte est un palindrôme");
}
else
{
System.out.println("Ce mot ou texte n'est pas un palindrôme");
}
}
}

}


java ne m'affiche aucune erreur, donc je me suis dit jusque là ça va.
Sauf que quand je lance le programme, il me demande de saisir un mot, me retourne le mot que j'ai demandé, le nombre de caractères et la première moitié du mot (jusque là c'est normal, c'est ce que j'ai demandé).
Mais ensuite, il ne prend pas en compte ma boucle for, pourquoi ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 17/11/2012 à 10:44
Prenons longueur=6 par exemple, ta boucle for dois tourner à partir de i=6 et tant que i est inférieur à 3, or i valant 6 on ne respecte plus cette condition et la boucle se termine.

Attention : en faisant i=i+i, tu vas totalement modifier le comportement de ton i-- car au lieu d'avoir i qui diminue il va considérablement augmenter. Tu auras dans l'ordre i=longueur, i=2*longueur-1, i=4*longueur-3, i=8*longueur-7 ... i= 2^n * longueur - 2^n +1

Et même en supposant que ta boucle fonctionne, le test si le mot est un palindrome se fera plusieurs fois (autant que de tour de boucle). Test qui sera de toute façon faux car demi2=""+i, c'est à dire un nombre, alors que moitie=texte.substring(0,longueur/2); c'est un dire une chaîne de caractères.
Il n'y a donc aucune raison pour qu'il y ait égalité de ces deux chaînes, et ce quelque soit la valeur de i
0
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 6
17 nov. 2012 à 10:48
Ah oui d'accord j'ai compris ! c'est comme si la boucle était déjà terminée avant même d'avoir commencé. Mais en fait ce que je voulais faire c'est que i varie de droite à gauche, donc du dernier caractère (longueur) jusqu'à celui du milieu (longueur/2). D'où le i--.

Le i=i+i c'est pour prélever les caractères que va faire ma boucle.
Par exemple si j'écris "bonjour" ça ferais : "r +u + o" (enfin, dans l'idée c'est ça), une concaténation en gros.

Comment je pourrais faire alors ? Déjà pour que la boucle tourne, et ensuite pour éviter que i augmente ? (créer plutôt une autre variable j=i+i?)

Merci.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
17 nov. 2012 à 10:56
Pour que la boucle tourne il faut juste inverser l'opérateur, c'est à dire mettre > au lieu de <
Pour longueur=6, le test i>longueur/2 sera donc vrai tant que i>3, tu auras bien ta moitié.

"Le i=i+i c'est pour prélever les caractères que va faire ma boucle."
Là tu en es très loin, tu prends les caractères où ? Certainement pas sur un entier en tout cas !
Les caractères se lisent sur... une chaîne de caractères (donc un String), tu dois donc utiliser palin, texte1, textemaj, texte, moitie, ou moitie2.
0
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 6
17 nov. 2012 à 11:17
Les caractères que je veux prélevés sont sur demi2 en fait.
Je fais comment ? comme cela ? :

char texteChar = demi2.charAt(i);

Merci
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
17 nov. 2012 à 11:22
Oui, mais attention, dans le code que tu as donné tout à l'heure demie2 n'a pas de valeur
0
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 6
17 nov. 2012 à 16:17
Tiens, dernière petite question, c'est pour un autre programme.
C'est un programme qui demande à l'utilisateur de saisir plusieurs nombres entiers positifs non nul, et qui retourne à l'utilisateur le plus grand nombre qu'il a saisi.
Pour l'instant, j'ai :
import java.util.Scanner;

public class nombre
{
public static void main (String [] args)
{
int i = 5;
System.out.println("Entrez un nombre positif");
do

{

Scanner C = new Scanner(System.in);
int saisie = C.nextInt();

if (saisie<0)
{
System.out.println("Veuillez entrer un nombre positif");
}
else if (saisie>0)
{
System.out.println("Vous avez saisi " + saisie);
}
else
{
System.out.println("Vous avez saisi 0, fin de la saisie.");
break;
}
} while (i>0);

}
}

le int=5; est là juste parce que je devais mettre un "while", à la base je voulais faire while(saisie!=0) mais ça ne voulait pas parce que ma variable "saisie" est à l'intérieur de la boucle et mon while est à l'extérieur. Du coup j'ai un peu triché en me débrouillant comme ça, m'enfin, c'est pas la question.

Ce que je ne sais pas faire, c'est récupérer les valeurs saisies par l'utilisateur, - les comparer si nécessaire - et retourner le plus grand.
Comment faire ?
Merci.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
17 nov. 2012 à 16:24
Tu sais déjà comparer deux nombres puisque tu le fais avec saisie et 0, tu peux donc très bien le faire aussi avec saisie et une autre variable qui sera ton maximum...

Pour ta boucle while, vu que tu mets un break, il te suffit de la mettre toujours à vrai :

while(true)
{
    if (saisie==0)
        break;
}
0
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 6
17 nov. 2012 à 16:30
" tu peux donc très bien le faire aussi avec saisie et une autre variable qui sera ton maximum... " ça je peux très bien le faire en effet, mais si mes deux variables sont différentes.
là, à chaque fois que ma boucle tourne, "saisie" prend une nouvelle valeur, je ne sais pas comparer toutes les valeurs que j'ai donné à ma variable "saisie" entre elles.

J'ai pensé aussi à faire en sorte que à chaque fois que ma boucle tourne, une nouvelle variable est créée, puis les variables sont comparées entre elles et le programme ressors la plus grande, mais je ne sais pas faire...
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
17 nov. 2012 à 16:39
ça ne sert à rien de retenir toutes les valeurs, seules t'intéressent le maximum de toutes les valeurs déjà saisies, et la nouvelle valeur saisie, tu n'as alors qu'à comparer ces deux valeurs pour déterminer le nouveau maximum et continuer avec la saisie suivante.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
17 nov. 2012 à 16:56
Exactement comme tu l'as fait, mais avec une affectation en plus

if (valeurmax>saisie)
{
    System.out.println("Le plus grand nombre saisi est :" +valeurmax);
}
else
{
    System.out.println("Le plus grand nombre saisi est : "+saisie);
    valeurmax=saisie;
}
0
Vitaldix Messages postés 116 Date d'inscription vendredi 9 novembre 2012 Statut Membre Dernière intervention 18 août 2013 6
17 nov. 2012 à 16:58
Oups, j'ai supprimé mon dernier message car j'avais justement trouvé la solution avant que je vois ton message !

Donc au final j'ai :
import java.util.Scanner;

public class exercice1
{
public static void main (String [] args)
{
System.out.println("Entrez un nombre positif");
while (true)
{

Scanner C = new Scanner(System.in);
int saisie = C.nextInt();
int valeurmax =0;
if (saisie<0)
{
System.out.println("Veuillez entrer un nombre positif");
}
else if (saisie>0)
{
System.out.println("Vous avez saisi " + saisie);

if (saisie>valeurmax)
{
valeurmax=saisie;
}
}
else
{
System.out.println("Vous avez saisi 0, fin de la saisie.");
break;
}
System.out.println("Votre plus grand nombre saisi est : " + valeurmax);
}
}
}
0