2017-09-24 3 views
-1

Donc j'essaie de passer la valeur de X de la fonction ActionPeformed à la fonction saveGame. Par contre la valeur de x quand il atteint les fonctions devient 0. Par ailleurs, voici comment je devrais travailler, le programme va d'abord initialiser les valeurs de chaque joueur (il y a quatre joueurs) et chacune aura des valeurs X et Y. et quand le bouton Enregistrer est cliqué, il doit prendre la valeur de X de chaque joueur et l'écrire dans un fichier.Passer une valeur d'une fonction à une autre fonction en Java

Voici mes codes:

Classe: MainPage

import java.awt.*; 
import javax.swing.*; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.Arrays; 
import java.awt.event.*; 
import java.util.Random; 
import java.lang.Math.*; 

import static java.util.logging.Logger.global; 

public class MainPage extends JFrame implements ActionListener{ 
    Random rand = new Random(); 
    . 
    . 
    protected Players[] player = new Players[5];//declare array for players 
    int[] dtrump = new int[5]; 



    public MainPage(boolean savegame) 
    { 
     saveGame(); 
    } 
    public MainPage(){ 
       . 
       . 
       . 
     for(int i=1;i<=4;i++){ //instantiate players 
      player[i] = new Players(); 
     } 
    public void actionPerformed(ActionEvent e){ 
     String ac = e.getActionCommand(); 
     String num[] = ac.split("/"); 
     int row = Integer.parseInt(num[0]); 
     int col = Integer.parseInt(num[1]); 
     boolean sucess = false; 
     boolean crash = false; 
     int x = player[turn].getX(); 
     int y = player[turn].getY();  
       . 
       . 
     for(int i=1;i<5;i++) { 

      System.out.println(" - "); 
      System.out.println(player[i].getX()); 
      dtrump[i] = player[i].getX(); 
      System.out.println(dtrump[i]); 
     } 
    } 
     . 
     . 
     . 

    public void saveGame() 
    { 
     for(int i=1;i<5;i++) { 

      System.out.println(" - "); 
      //System.out.println(player[i].getX()); 
      // dtrump[i] = player[i].getX(); 
      System.out.println(dtrump[i]); 
     } 
     try { 
      //System.out.println(player[2].getX()); 

      File save = new File("save.txt"); 
      if (!save.exists()) { 
       save.createNewFile(); 
      } 
      FileWriter savefile = new FileWriter(save); 
      for (int i = 1; i < 5; i++) { 
       System.out.println(dtrump[i]); 
       savefile.write(dtrump[i] + System.getProperty("line.separator")); 
       // savefile.write(pyerY[k]+ System.getProperty("line.separator")); 

      } 
      savefile.close(); 
      //JOptionPane.showMessageDialog(null,"Eggs are not supposed to be green."); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
    } 
} 

Joueurs de classe:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Players{ 
    private int x; 
    private int y; 
     . 
     . 
     . 
    public void setX(int x){ 
    this.x = x; } 


    public int getX(){ 
    return x; } 

    public void setY(int y){ 
    this.y = y; } 

    public int getY(){ 
    return y; } 
} 
+0

Veuillez poster un [Exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) –

+2

Bienvenue dans Stack Overflow! Vous avez posté beaucoup de code dans votre question, ce qui nous empêche de savoir exactement où se situe le problème (et aux futurs lecteurs). Veuillez réduire votre code de problème à 10 lignes ou moins. Voir: [Comment créer un exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) et [Comment déboguer de petits programmes] (https://ericlippert.com/2014/03/05/how-to-debug-petits-programmes /). –

+0

Cette question n'est pas claire. Je n'ai vu nulle part dans 'actionPerfomed' appelant' saveGame'. Vous venez de l'appeler de constructeur différent. –

Répondre

0

Voici ce que mon suspection. protected Players[] player est une variable d'instance. Les objets créés par les deux constructeurs (celui avec argument, et celui sans argument) auront une copie de leur propre (pas la même variable d'instance). Il semble saveGame et actionPerformed accédé à partir de différents objets. s'il vous plaît essayez comme ci-dessous.

protégés Joueurs statiques [] joueurs = nouveaux joueurs [5]; // déclarer tableau pour les joueurs

static int[] dtrump = new int[5]; 
+0

Nope ne fonctionne toujours pas – Teeban

+0

Mais à la place, j'ai essayé de changer'int [] dtrump = new int [5] 'à' static int [] dtrump = new int [5] ' – Teeban

+0

si cela fonctionne , grand –

0

Si vous voulez passer une valeur d'une méthode (qui est ce que les fonctions sont appelées dans Java) à un autre tout ce que vous devez faire est dans la déclaration de la méthode de la méthode que vous avez envie de passer X à faire quelque chose comme:

public void saveGame(int aNumber){ 
the code you want to use X(passed and referred to as aNumber)... 
} 

Ensuite, lorsque vous appelez la méthode savegame vous passeriez X en mettant:

saveGame(X); 

Cela va passer la valeur de X à saveGame. Voila!