Topic de JamereBurvelle :

[PROJET] Apprenons à programmer en JAVA !

Le 04 décembre 2017 à 20:36:56 HommeDeMode a écrit :

Le 04 décembre 2017 à 20:29:19 JamereBurvelle a écrit :

Le 04 décembre 2017 à 19:40:50 HommeDeMode a écrit :
J'invoque Jamere pour le hangman. https://image.noelshack.com/fichiers/2016/48/1480747392-picsart-12-03-07-22-54.jpg

T'as pas réussi ? J'peux t'aider si tu veux :hap:

C'est pour le hiddenWord, je suis dessus. Je réfléchis calmement.

Pour l'instant j'ai fait ça pour commencer par les '_'

String hiddenWord = new String();
		char hiddenChar = '_';
		for (int i = 0; i < word.length(); i++)
			hiddenWord += hiddenChar;

Ne boucle jamais en faisant des concaténations de String et en réaffectant la valeur, tu multiplies les objets en mémoire.

Utilise plutôt un StringBuilder avec la méthode append.

J'avais utilisé les méthodes replace et replaceCharAt si ça peut t'aider, mais mon code je le revois c'est un bordel sans nom, j'essayais des nouveaux trucs à chaque fois c'est pas optimisé du tout je pense, j'ai même pas envie de revenir dessus https://image.noelshack.com/fichiers/2016/24/1466366197-risitas10.png

Le 04 décembre 2017 à 21:44:34 KheyALaine a écrit :

Le 04 décembre 2017 à 20:36:56 HommeDeMode a écrit :

Le 04 décembre 2017 à 20:29:19 JamereBurvelle a écrit :

Le 04 décembre 2017 à 19:40:50 HommeDeMode a écrit :
J'invoque Jamere pour le hangman. https://image.noelshack.com/fichiers/2016/48/1480747392-picsart-12-03-07-22-54.jpg

T'as pas réussi ? J'peux t'aider si tu veux :hap:

C'est pour le hiddenWord, je suis dessus. Je réfléchis calmement.

Pour l'instant j'ai fait ça pour commencer par les '_'

String hiddenWord = new String();
		char hiddenChar = '_';
		for (int i = 0; i < word.length(); i++)
			hiddenWord += hiddenChar;

Ne boucle jamais en faisant des concaténations de String et en réaffectant la valeur, tu multiplies les objets en mémoire.

Utilise plutôt un StringBuilder avec la méthode append.

On a pas le niveau pour faire ça encore [[sticker:p/1lmk]]

Le 04 décembre 2017 à 21:44:34 KheyALaine a écrit :

Le 04 décembre 2017 à 20:36:56 HommeDeMode a écrit :

Le 04 décembre 2017 à 20:29:19 JamereBurvelle a écrit :

Le 04 décembre 2017 à 19:40:50 HommeDeMode a écrit :
J'invoque Jamere pour le hangman. https://image.noelshack.com/fichiers/2016/48/1480747392-picsart-12-03-07-22-54.jpg

T'as pas réussi ? J'peux t'aider si tu veux :hap:

C'est pour le hiddenWord, je suis dessus. Je réfléchis calmement.

Pour l'instant j'ai fait ça pour commencer par les '_'

String hiddenWord = new String();
		char hiddenChar = '_';
		for (int i = 0; i < word.length(); i++)
			hiddenWord += hiddenChar;

Ne boucle jamais en faisant des concaténations de String et en réaffectant la valeur, tu multiplies les objets en mémoire.

Utilise plutôt un StringBuilder avec la méthode append.

Toi parler Chinois ? https://image.noelshack.com/fichiers/2016/30/1469484509-cchhb.png

Le 04 décembre 2017 à 21:45:58 JamereBurvelle a écrit :
J'avais utilisé les méthodes replace et replaceCharAt si ça peut t'aider, mais mon code je le revois c'est un bordel sans nom, j'essayais des nouveaux trucs à chaque fois c'est pas optimisé du tout je pense, j'ai même pas envie de revenir dessus https://image.noelshack.com/fichiers/2016/24/1466366197-risitas10.png

Ça existe replaceCharAt ??

Je t'ai dit de la merde, c'est une méthode que j'avais pompé sur le net :rire:
public static String replaceCharAt(String s, int pos, char c) {
        return s.substring(0, pos) + c + s.substring(pos + 1);
    }

KheyALaine relève un point intéressant, vous allez rire, mais si dans le programme du pendu vous utilisez un StringBuilder au lieu d'un String pour HiddenWord, vous avez juste à faire ça :

StringBuilder hiddenWord = new String();
      char hiddenChar = '_';
      for (int i = 0; i < word.length(); i++)
          hiddenWord.append(hiddenChar);

Et pour remplacer :



/* (int indice_de_début, int indice_de_fin, String chaine)*/
hiddenWord.replace( , , ); 
[[sticker:p/1lm9]]
Ca fonctionne comment un StringBuilder ? J'avais jamais vu :(

Le 05 décembre 2017 à 09:15:55 JamereBurvelle a écrit :
Ca fonctionne comment un StringBuilder ? J'avais jamais vu :(

C'est juste une classe qui fonctionne un peu comme une String sauf que t'as des fonctions pour te faciliter la vie.

Et ça évite de plomber la mémoire [[sticker:p/1kki]]

c'est un pendu ? si ouais, j'ai fait le mien à l'arrache en python:

"""Hidden word in python ; by andeuv, wtfpl
"""
try:
    from os import system
    from sys import argv
except ImportError as err:
    print(err)

class HiddenWord:
    def __init__(self, word):
        self.word = word.lower()
        self.tried = self._gen()
    
    def _gen(self):
        m = list(self.word)
        for i in range(len(m)):
            m[i] = "_"
        return m

    def guess(self):
        if "".join(self.tried) == self.word:
            return True
        else:
            return False
if __name__ == '__main__':
    game = HiddenWord(argv[1])
    wordArray = list(game.word)
    while not game.guess():
        system("clear")
        print("Word to guess : %s" % ("".join(game.tried)))
        i = list(input('Type your guessing: ').lower())
        for j in range(len(i)):
            for k in range(len(wordArray)):
                if i[j] == wordArray[k]:
                    game.tried[k] = i[j]
    print("You won. That was \"%s\"." % (game.word))    
J'ai dû mal à comprendre les arguments de la mémoire flinguée. Aujourd'hui on a au moins 8 putain de Go sur nos machines. J'ai dû mal à croire qu'un pendu va faire planter Windows. https://image.noelshack.com/fichiers/2017/26/1/1498469448-risotas2.png
Bon le pendu je passe, j'arrive pas le mot caché.

Le 05 décembre 2017 à 17:17:50 HommeDeMode a écrit :
J'ai dû mal à comprendre les arguments de la mémoire flinguée. Aujourd'hui on a au moins 8 putain de Go sur nos machines. J'ai dû mal à croire qu'un pendu va faire planter Windows. https://image.noelshack.com/fichiers/2017/26/1/1498469448-risotas2.png

C'est pas une question de planter windows, c'est juste des bonnes habitudes à prendre, sinon, quand tu feras des plus grosses applications t'aura l'effet minecraft : un jeu aux graphismes qui devraient tourner tranquille sur des PC d'y a 10 ans (à la façon du moteur graphique de quake) mais qui finalement nécessite un PC [[sticker:p/1ljr]]

Sinon, un petit cour rapide sur la gestion des objets et de la mémoire. On va causer pointeur [[sticker:p/1jnd]]

Si on reprend à partir du langage C, on pouvait avoir des variables, et des pointeurs :


int i=3;
int var1[3];
int *var2 = malloc( i * sizeof(int) );

Dans ce code, on a un tableau d'entier de 3 cases et on a un pointeur sur un tableau d'entier qui contient 3 cases.

Jusque là rien de différent?

La différence réside dans le fait que var1 est un tableau "statique" (ne confondez pas avec l'instruction static") tandis que var2 est une variable dynamique.

Autrement dit, var1 est déclaré à même le code, contient donc un espace mémoire dans le programme et contient des variables. La taille du programme est liées aux nombres de variables "statiques" déclarée.

var2 n'est pas un tableau, il contient juste une adresse. En suivant cette adresse, on accède au tableau de 3 case généré par l'allocation mémoire (malloc).

Autrement dit avec un dessin :
https://image.noelshack.com/fichiers/2017/49/2/1512495941-pointeur.png

A quoi ça sert me direz vous?
Sois ça peut servir, si l'utilisateur à une valeur particulière à remplir (par exemple le nombre de case qu'il désire dans le tableau).
Soit pour traiter des fichiers.
Soit encore pour des raisons de performance (c'est pas super intelligent de pondre des tonnes et des tonnes de variables quand on voit la taille des logiciels aujourd'hui).

Maintenant le problème de la mémoire :
Une variable est lié à son programme donc pas de soucis de taille, de plus, une variable est éliminé à la fin d'un bloc.
Un pointeur aussi est éliminé à la fin d'un bloc, mais pas le contenu sur lequel il pointe.
Etant donné qu'on aura tendance à beaucoup en créer, c'est important de bien penser à les virer.

Ne vous inquiétez pas, ça c'est pour C++.

Pour le JAVA, la gestion de la mémoire est automatique grâce au ramasse miette mais :
-C'est une routine qui vérifie si des objets sont encore pointé, elle ne s'active pas à chaque fin de bloc.
-Si vous blindez votre mémoire d'objet, votre programme sera lent, ramasse miette ou pas.

Voilà donc pourquoi il faut faire gaffe à ce que vous faites un maximum sachant qu'en Java, toute instanciation d'objet est un pointeur. [[sticker:p/1jnf]]

PS : M'en voulez pas si j'ai dit deux trois conneries, c'était pour vulgariser, hésitez pas à corriger si c'est pas bon :ok:

J'ai un soucis à l'exercice 85.3

J'essaie d'intégrer un compteur qui incrémente +1 à chaque fois qu'on appelle la fonction weight() mais je ne sais pas comment le traduire en java.

package Week5;

public class Reformatory {
	
	public double weight(Person person) {
		return person.getWeight();
	}

	public void feed(Person person) {
		person.setWeight(person.getWeight()+1);
	}
	
	public int totalWeightsMeasured() {
            ?????????????
          
		
	}
}

Le 05 décembre 2017 à 19:52:10 HommeDeMode a écrit :
J'ai un soucis à l'exercice 85.3

J'essaie d'intégrer un compteur qui incrémente +1 à chaque fois qu'on appelle la fonction weight() mais je ne sais pas comment le traduire en java.

package Week5;

public class Reformatory {
	
	public double weight(Person person) {
		return person.getWeight();
	}

	public void feed(Person person) {
		person.setWeight(person.getWeight()+1);
	}
	
	public int totalWeightsMeasured() {
            ?????????????
          
		
	}
}

Tu déclares un attribut compteur dans ta classe et l'initialise à 0.
À chaque fois que weight() est call, tu appelles ta méthode totalWeightsMeasured ; tu incrémentes ton attribut compteur dans cette même méthode.

En pseudo code:

Classe MaClasse {
    totalPoids = 0

    weight(Personne){
        totalPoidsMesures()
        return Personne.getPoids()
    }

    totalPoidsMesures(){
        totalPoids += 1
    }

    // si totalPoids est en private
    getTotalPoidsMesurer(){
        return totalPoids
    }
}
Help les kheys j'ai dl Java SE 9.0.1 pour pouvoir utiliser netbeans mais en allant dans TMC => settings et quand je dl les exercices ils ne s'affichent pas dans "projects" [[sticker:p/1lmk]]

[20:44:02] <andeunv>

Le 05 décembre 2017 à 19:52:10 HommeDeMode a écrit :
J'ai un soucis à l'exercice 85.3

J'essaie d'intégrer un compteur qui incrémente +1 à chaque fois qu'on appelle la fonction weight() mais je ne sais pas comment le traduire en java.

package Week5;

public class Reformatory {
	
	public double weight(Person person) {
		return person.getWeight();
	}

	public void feed(Person person) {
		person.setWeight(person.getWeight()+1);
	}
	
	public int totalWeightsMeasured() {
            ?????????????
          
		
	}
}

Tu déclares un attribut compteur dans ta classe et l'initialise à 0.
À chaque fois que weight() est call, tu appelles ta méthode totalWeightsMeasured ; tu incrémentes ton attribut compteur dans cette même méthode.

En pseudo code:

Classe MaClasse {
   totalPoids = 0

   weight(Personne){
       totalPoidsMesures()
       return Personne.getPoids()
   }

   totalPoidsMesures(){
       totalPoids += 1
   }

   // si totalPoids est en private
   getTotalPoidsMesurer(){
       return totalPoids
   }
}

T'es développeur?

Données du topic

Auteur
JamereBurvelle
Date de création
22 novembre 2017 à 23:04:59
Nb. messages archivés
412
Nb. messages JVC
410
Voir le topic sur JVC

Afficher uniquement les messages de l'auteur du topic

En ligne sur JvArchive

JvArchive compagnon

Découvrez JvArchive compagnon , l'userscript combattant la censure abusive sur le 18-25 !