[java] apprentissage difficile!

effetcivement ca marche bien.

J ai remarquer qu il y avait des valeurs négatives et j ai fait ca pour y pallier


private void lancement_de()
    {
    System.out.println("Entrez votre Nom:");
   
    String name = new Scanner(System.in).nextLine();

    for(int i=0;i<10;i++)
        {
        System.out.println("Nombre de lancement des dés :" +i);
 
        Random rd = new Random();
        System.out.println("Lancement du premier dé");  
        int n = rd.nextInt()% 7;

        if(n>0)
        {System.out.println("Résultat du lancé du premier dé: " +n);}

        if(n<0) 
            {
            n=-n;
            System.out.println("Résultat du lancé du premier dé: " +n);
            }
        

        System.out.println("Lancement du deuxième dé");  
        int m = rd.nextInt()%7;
        if(0<m)
        {System.out.println("Résultat du lancé du premier dé: " +m);}
  
        if(m>0) 
            {
            m=-m;
            System.out.println("Résultat du lancé du premier dé: " +m);
            }
        
        System.out.println("Résultat du lancé du deuxième dé: " +m);
        
        if (n + m == 7)
           score=score+10;
        }
     System.out.println("Score: " +score);
     System.out.println("Bravo, vous etes dans les meilleurs scores"); 
    }
   }

mais comme d habitude j ai beau lancé ce code auatant de fois que je veux , je continue a retrouver des valeurs négatives et des doublons de phrases "resultat du lancé du premier (ou deuxième) dé"

commence par initialiser la variable score.
pour ton probleme de lancé négatif, tu as la méthode abs dans la classe Math.

int x = Math.abs(un_chiffre);

Et regarde bien ton code quand tu teste m, tu as fais une légère erreur d’écriture.

edit
test de la somme de n et m : if( (n+m) == 7) //voir la priorité des opérations

il faut accepter les valeurs à 0:
if(n>=0)…
corriger ce test:
m<0
< et pas > !

le plus simple (audn ce sera au point) serait de supprimer tous les affichages dans tes if: tu commence par calculer n,m,le score, et tu affiche juste
tirage des dés: 2, 5 score 10.

edit: fans tes if (m) tu affiche résultat dur 1er tirage, et tu refait ensuite un affichage résultat du 2ème tirage, normal que ce soit en double :wink:

Tiens comme tu vas te lancer sur Java, je te file le cours d’un de mes profs (que j’adore, que j’idolâtre!)

http://www.forax.org (pour son site)
http://www-igm.univ-mlv.fr/~forax/ens/java-avance/cours/pdf/

Et celui que j’ai eu pour débuter le java :

http://www-igm.univ-mlv.fr/%7Ebeal/Enseign…avaLicence.html

(ne pas prendre ce qui concerne java4 bien sûr)

Au passage, c’est pas rd.nextInt() % 7 qu’il faut faire, mais rd.nextInt(7), cf. doc

nickel tout marche parfaitement, je vous remercie bien!

je continue mon bonhomme de chemin et j ajoute une difficulté pour moi


/*
* Main.java
*
* Created on 26 mars 2007, 19:02
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package nfe114chap01jeudede;
import java.io.*;
import java.util.Scanner;
import java.util.Random;
import java.io.FileOutputStream;
import java.lang.String;

/**
*
* @author Florent
*/
public class Main {

   private String name;
   private int score;
   private int Facevalue;
   private int random1;
   private int random2;

   /** Creates a new instance of Main */
   public Main()
   {
     /* initialise ici */
   score=0;
   }
   
   /**
    * @param args the command line arguments
    */
   public static void main(String[] args) throws FileNotFoundException, IOException {
       // TODO code application logic here
       Main reference = new Main(); //création de la classe en appelant son constructeur
 reference.lancement_de(); //utilisation de sa méthode
   }

private void lancement_de() throws FileNotFoundException, IOException
    {
    System.out.println("Entrez votre Nom:");
   
    String name = new Scanner(System.in).nextLine();

    for(int i=0;i<10;i++)
        {
        System.out.println("Nombre de lancement des dés :" +i);
 
        Random rd = new Random();
        System.out.println("Lancement du premier dé");  
        int n = Math.abs(rd.nextInt()% 7);
        System.out.println("Résultat du lancé du premier dé: " +n);

        System.out.println("Lancement du deuxième dé");  
        int m = Math.abs(rd.nextInt()%7);
        System.out.println("Résultat du lancé du deuxième dé: " +m);
  
        
        if (n + m == 7)
           score=score+10;
        }
     System.out.println("Score: " +score);
     System.out.println("Bravo, vous etes dans les meilleurs scores"); 
     FileOutputStream fos = null;
     fos = new FileOutputStream("meilleurscore.txt", true);
     BufferedOutputStream bos = new BufferedOutputStream(fos);
     DataOutputStream dos = new DataOutputStream(bos);
     dos.writeInt(score);
     dos.writeBytes(name);
     dos.close();
    }
   }

ce code la n a aucune erreur "de code", par contre mon fichier meilleurscore est bizarrement rempli
en effet j ai bien name qui apparait correctement mais score est vide…

pourtant d après la javadoc

commence par récuperer les erreurs en virant ‘throws FileNotFoundException, IOException’ et en encapsulant :
dos.writeInt(score);
dos.writeBytes(name);

avec un bloc try catch
try{
dos.writeInt(score);
dos.writeBytes(name);
}
catch(Exception ex)
{
System.out.println("Erreur : "+ex.toString());
}

au passage tu peux simplifier

DataOutputStream dos = null;
try{
dos = new DataOutputStream(new FileOutputStream("meilleurscore.txt", true));
dos.writeInt(score);
dos.writeBytes(name);
dos.close();
}
catch(Exception ex)
{
System.out.println("Erreur : "+ex.toString());
}

J’espère que tu ne t’attends pas à avoir 14 Nom dans le fichier? car là tel que tu l’écrit, tu écris (ou dois écrire, je suppose) l’entier sous forme de séquence d’octets…

Pas du tout adapté aux fichiers texte :slight_smile:

Ce qu’il te faut c’est PrintStream :

http://java.sun.com/javase/6/docs/api/java…rintStream.html

mouai…donc en gros faut lire la javadoc mais pas trop…snif ca devient compliqué la…

Avant de lire la javadoc, lis un cours de Java hein :slight_smile:

car dedans, tu as les classes de base, etc.

je demande a nouveau votre aide pour un nouveau code:


/*
 * Main.java
 *
 * Created on 8 avril 2007, 14:36
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package vehicule;

/**
 *
 * @author Florent
 */
public class Main {
    
    /** Creates a new instance of Main */
    public Main() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        voiture("Ferrari","Testa Rossa",150000,"blanc");
        
        ajouterVehicule(0,marque,modele,prix,couleur);
        
        rechercherVehiculeParMarque("Ferrari");
    }
    
}

public class Vehicule {
    public String marque;
    public String modele;
    public Integer prix;
    public String couleur;
    
    private void voiture( String marque, String modele, Integer prix, String couleur) throws IllegalArgumentException
        {
        if(!couleur.equals("rouge") || !couleur.equals("gris") || !couleur.equals("vert") || !couleur.equals("blanc") || !couleur.equals("noir"))
            { IllegalArgumentException("Couleur invalide " + couleur);}
        this.marque = marque;
        this.modele = modele;
        this.couleur = couleur;
        this.prix = prix;
        
        String getMarque(String marque){
            return marque;
        }
        String getModel(String model){
            return model;
        }
        Integer getPrix(Integer prix){
            return prix;
        }
        String getCouleur(String couleur){
            return couleur;
        }
        }
}

public class VehiculeFactory 
{
   static void creerVehicule(String marque, String model, Integer prix, String couleur) throws IllegalArgumentException
       {
       public static String rechercherVehiculeParMarque(String marque)
            {
            Class.forName("org.apache.derby.jdbc.ClientDriver");
            Connection conn =DriverManager.getConnection("jdbc:derby://localhost:1527/Application", "nfe114", "nfe114");
            Statement statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
            String sql = "select * FROM \"NFE114\".\"VEHICULE\" where marque="+marque+"";
            ResultSet resultat = statement.executeQuery(sql);
            while(resultat.next())
                {
                int id = resultat.getInt(1);
                String nom = resultat.getString(2);
                double prix = resultat.getDouble(3);
                java.sql.Date date = resultat.getDate(4);
                int row = resultat.getRow();
                System.out.println("Données contenues dans la ligne "+row);
                System.out.println("id : "+id+" marque : "+marque+" prix : "+prix+" modele : "+modele" couleur : "+couleur);
                }
            }
        public static boolean ajouterVehicule(String marque,String modele, Integer prix, String couleur) throws Exception 
            {
            Class.forName("org.apache.derby.jdbc.ClientDriver");
            Connection conn =DriverManager.getConnection("jdbc:derby://localhost:1527/Application", "nfe114", "nfe114");
            Statement st = conn.createStatement();
            boolean result = st.execute("insert into \"NFE114\".\"VEHICULE\" values('"+marque+"','"+modele+"',"+prix+",'"+couleur+"')");
            conn.close();
            return result;
        };
       }
 

 }   

Le principe est de :
-controler la couleur si ok on retourne toutes les valeurs

  • ajouter la voiture dans la table
  • faire une recherche et l’afficher sur la voiture en question

le problème c est que j ai plusieurs erreurs:
String getMarque(String marque){ -> expected ; (et je vois pas du tout pourquoi il attend un ‘;’
public static String rechercherVehiculeParMarque(String marque) -> Illegal start of expression

De plus je sais comment insérer un enregistrement…mais comment lire le resultat de la requete select? dois je utiliser les ResultSet?

merci d’avance

plusieurs remarques :

Dans le ‘main’ principal :
tous les strings commencent et finissent par des guillemets et non des apostrophes (" au lieu de ')
les méthodes private ne sont accessibles que depuis la classe qui implémente ces méthodes
tu ne créé aucune classe Vehicule

sinon pour les bdd, tu dois effectivement utiliser les ResultSet.

j ai corrigé en partie le code:

j ai crée en les 2 classes qui existait en public au lieu de rien…(VehiculeFactory et Vehicule)

j ai mis les variable marque, modele, prix et couleur en variable publique.

j ai ajouté le code utilisant les ResultSet pour consulter les enregistrements de la base de donnée.

Mais lors de la compilation…toujours les 2 même erreurs qui reviennent:
String getMarque(String marque){ -> expected ;
public static String rechercherVehiculeParMarque(String marque) -> Illegal start of expression

De plus…je ne suis pas complètement sur que l’appel des différents constructeurs dans le Main soit correct…

tu essaie de créer une méthode à l’intérieur d’une méthode. C’est ça qu’il n’aime pas


static void creerVehicule(String marque, String model, Integer prix, String couleur) throws IllegalArgumentException
      {
      public static String rechercherVehiculeParMarque(String marque)

bonsoir tout le monde, je reviens pour une nouvelle question qui est un peu liée a la précédente:

voici ma page chercheresultat.java



public class RechercheVehiculeParMarqueAction extends Action {
    
    /* forward name="success" path="" */
    private final static String SUCCESS = "sucess";
    
    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
 public static String rechercherVehiculeParMarque(String saisie)
         {
         Class.forName("org.apache.derby.jdbc.ClientDriver");
         Connection conn =DriverManager.getConnection("jdbc:derby://localhost:1527/Application", "nfe114", "nfe114");
         Statement statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
         String sql = "select * FROM \"NFE114\".\"VEHICULE\" where marque="+saisie+"";
         ResultSet resultat = statement.executeQuery(sql);
         while(resultat.next())
             {
             int id = resultat.getInt(1);
             String nom = resultat.getString(2);
             double prix = resultat.getDouble(3);
             java.sql.Date date = resultat.getDate(4);
             int row = resultat.getRow();
             System.out.println("Données contenues dans la ligne "+row);
             System.out.println("id : "+id+" marque : "+marque+" prix : "+prix+" modele : "+modele" couleur : "+couleur);
             }
         }
 // permet de réenvoyer le contenu du résultat a la page résultat
    public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        return mapping.findForward(SUCCESS);
        
    }
}

J ai une erreur au niveau de :
System.out.println("id : "+id+" marque : "+marque+" prix : "+prix+" modele : "+modele" couleur : "+couleur); auquel il me dit ") expected"

De plus j ai une question au sujet du renvoi dinformation.
Le principe serait d’envoyer le résultat de la requete dans une autre page lié par le sucess (<forward name=“sucess” path="/Resultat.jsp"/> lié a mon strut-config.xml).

Es ce que mon code est correct pour ca?

merci d’avance

manque un ‘+’ après modèle

merci pour le tuyau, effectivement il manquait :wink:

Par contre depuis j ai d’autres erreurs qui sont arrivées:
En effet, je n ai pas fait les déclarations de variables …mais comment les faire?

dois je plutot les creer en public? ou en private?
de plus la variable "Connection" c est plutot quoi comme type? tout comme DriverManager…?

de plus l envois vers l autre page du resultat a votre avis ca va marcher?

merci

Je pense plutot les creer dans la fonction.

Mais pour Connection ou DriveManager? c est quel type de variable?