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

Trois questions sur Java

]trichelieu[
]trichelieu[
Niveau 10
18 avril 2012 à 07:13:37

Salut, j'ai un problème avec mon programme java et je vois pas... pourquoi... :p)

Mon programme est une sorte de simulateur basique : ça génère un tableau d'une taille avec, à chaque case, un certain pourcentage de chance qu'il y ait de la nourriture, de brouteurs ou rien.
En gros, lorsque l'utilisateur démarre mon programme, il doit rentrer comme argument :
- La taille du tableau
- Le pourcentage de chance que ce soit de brouteurs
- Le pourcentage de chance que ce soit de la nourriture

(du genre "appli.java 25 0.1 0.2")
Je décrirai pas plus mon programme vu que le reste est peu important (c'est plus sur l'évolution de ce monde mais bref). Voici comment j'ai rempli mon tableau :
http://pastebin.com/csz8PPeb
(rateOfFood et rateOfGrazer sont en pourcentages à ce moment là).

Je pense que ce code ne marche pas, puisque lorsque j'ai rentré " "appli.java 25 0.1 0.2", je me suis retrouvé avec un nombre INCROYABLE de nourriture, ainsi que pas mal de brouteur, alors que la majorité devrait être vide. Je suis pas sûr de comprendre pourquoi... Si vous pouviez m'éclairer svp :peur:

Aussi, j'ai voulu testé de remplacé ce code par un tableau pré-défini pour voir si le reste fonctionné mais... Voilà ce que j'ai entré pour généré le tableau, ainsi que ce qui en est sorti :
http://pastebin.com/yCxHbL3Z

Je comprends vraiment pas pourquoi ça fait ça.

Enfin, rien à voir, je voulais savoir est-ce que vous savez comment checker le nombre d'index remplie dans un array de int ?

Du genre :

int [0] = 1;
int [3] = 2;
int [5] = 2;
J'aimerai une fonction qui me dise que cette array n'a que 3 valeurs en elle :p) Il y a un moyen de programmé une méthode à mon niveau ou c'est mort ? :p)

:merci: pour votre aide :p)

caelacanthe
caelacanthe
Niveau 10
18 avril 2012 à 08:37:35

"J'aimerai une fonction qui me dise que cette array n'a que 3 valeurs en elle :p) Il y a un moyen de programmé une méthode à mon niveau ou c'est mort ? :p) "

:d) non mais ça c'est impossible, toutes les cases vides sont en réalité des zéros, ou alors tu utilises une magic value et tu dis que -1 est une case vide, et tu codes toi-même la fonction qui fait le compte, il suffit de parcourir le tableau et de compter les -1 :oui:

Bunyan
Bunyan
Niveau 17
18 avril 2012 à 09:13:17

Le faire une fois, et ensuite changer cet indice quand il y a des changements (évite les parcours inutiles de tableau).

Faire comme Caelacanthe le suggère : initialise ton tableau à une valeur que tu n'utilises pas, ça te fera un indicateur de case vide, typiquement -1.

Sinon, pour le Random, je crois que tu vas devoir l'initialiser un peu, c'est dire faire quelque chose comme :
int i = 0;
while (i++ < 100000) rand.nextInt();

Je me souviens grosso-modo de la raison invoquée par mes profs, mais l'expliquer ... (et vu que je ne trouve rien dessus, soit je fais une mauvaise recherche, soit c'est une connerie).

]trichelieu[
]trichelieu[
Niveau 10
18 avril 2012 à 11:16:13

Ok, dommage pour l'array, mais bon c'est ainsi :p)

Sinon, pour le random, je vois pas ce que tu veux dire par while(i++ < 10) rand.nextInt();, je veux dire j'ai déjà un for avant...

Tu pourrais faire un petit code pour m'en montrer l'execution ? :p)

Bunyan
Bunyan
Niveau 17
18 avril 2012 à 11:27:55

Je voulais signifier ceci : http://pastebin.com/9zsj02K0
Ton code modifié (non-testé).

La boucle ne fait rien à part "faire chauffer" le moteur de Random. Je me sers un peu de toi pour tester le truc pour le coup ^^'

]trichelieu[
]trichelieu[
Niveau 10
18 avril 2012 à 11:42:23

Non, les tableaux générés sont toujours ultra plein :-(

041
041
Niveau 10
18 avril 2012 à 13:12:57

"25 0.1 0.2"
Donc là tu veux un tableau de 25 avec
10% de chances que ce soit brouteur,
20% de chances que ce soit nourriture
70% vide

Sauf que...
if(random<=rateOfGrazer){
cell[i][j] = '@'; //this cell is a grazer
Ok là tu as 11% de chances d'avoir ton brouteur
(0 1 2 3 4 5 6 7 8 9 10)
:d) change en "<"

}else if(random<rateOfFood + rateOfGrazer){
cell[i][j] = ' '; //this cell is empty
Si random < 30 donc.
Ca fait 30%, faudrait 70
:d) change en ">"

Et là ça devrait marcher :hap:

041
041
Niveau 10
18 avril 2012 à 13:24:59

https://image.noelshack.com/fichiers/2012/16/1334748258-2012-04-18-132339_1366x768_scrot.png

Je pense que c'est le résultat que tu souhaite

]trichelieu[
]trichelieu[
Niveau 10
18 avril 2012 à 15:32:13

Ça marche très bien merci ! :)

]trichelieu[
]trichelieu[
Niveau 10
19 avril 2012 à 02:24:22

J'ai encore une autre question en faite :p)

Quand on fait cell1=cell2 , ça associe les deux arrays au même valeur (même pointeur), du coup si on change cell1, ça change cell2... J'aimerai pouvoir créer une copie de cell2 que je puisse changer sans changer cell1 :p)

J'ai essayé ça :

public void fonction(){
for(int i = 0; i<numberOfCell; i++){
for(int j = 0; j<numberOfCell;j++){
cell1[i][j] = cell2[i][j];
}
}
}

Mais j'ai pas l'impression que ça marche... :-( Peut-être que ça marche, mais les résultats de mon programme ne sont pas cohérant :(

Bunyan
Bunyan
Niveau 17
19 avril 2012 à 07:40:50

Au choix :

int[] newTab = new int[oldTab.length];
Arrays.copy(oldTab, newTab.length);

OU

int[] newTab = oldTab.clone();

Remarque : non testé, juste regardé la doc.

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