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.![]()
T'as pas réussi ? J'peux t'aider si tu veux
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.
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.![]()
T'as pas réussi ? J'peux t'aider si tu veux
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
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.![]()
T'as pas réussi ? J'peux t'aider si tu veux
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.
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![]()
Ça existe replaceCharAt ??

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( , , );

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
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))
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.![]()
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
Sinon, un petit cour rapide sur la gestion des objets et de la mémoire. On va causer pointeur
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 :
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.
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 
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.3J'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
}
}[20:44:02] <andeunv>
Le 05 décembre 2017 à 19:52:10 HommeDeMode a écrit :
J'ai un soucis à l'exercice 85.3J'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?
JvArchive compagnon