有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将我的对象传递给另一个类

我读过几篇关于传递值如何工作的文章,但我不能从case语句调用序列化方法,因为我没有正确地传递“club”变量。我知道它超出了我的“MainMenu”类的范围,但我不知道将它传递给我的“MainMenu”类的语法

我想把它传递给我的“MainMenu”构造函数,我已经尝试过了,但是我需要将类型从对象转换为字符串,我正在努力解决这个问题

如何阻止“俱乐部”显示“找不到符号”?这发生在我的序列化case语句中

这是我的堆栈跟踪,我还包括了最相关的代码片段

MainMenu.java:19: error: cannot find symbol                                                                                                                          
    MainMenu team = new MainMenu(club);                                                                                                                              
                                 ^                                                                                                                                   
  symbol:   variable club                                                                                                                                            
  location: class MainMenu  
MainMenu.java:49: error: cannot find symbol                                                                                                                          
    saveclub1.Serialize(club , club_one);                                                                                                                            
                        ^                                                                                                                                            
  symbol:   variable club                                                                                                                                            
  location: class MainMenu                                                                                                                                           
MainMenu.java:49: error: cannot find symbol                                                                                                                          
    saveclub1.Serialize(club , club_one);                                                                                                                            
                               ^                                                                                                                                     
  symbol:   variable club_one                                                                                                                                        
  location: class MainMenu                                                                                                                                           
MainMenu.java:72: error: cannot find symbol                                                                                                                          
    saveclub2.Serialize(club , club_one);                                                                                                                            
                        ^                                                                                                                                            
  symbol:   variable club                                                                                                                                            
  location: class MainMenu                                                                                                                                           
MainMenu.java:72: error: cannot find symbol                                                                                                                          
    saveclub2.Serialize(club , club_one);  
symbol:   variable club_one                                                                                                                                        
  location: class MainMenu                                                                                                                                           
5 errors           

主菜单。java代码片段

String[] clubName = {"Arsenal","Aston Villa", "Bournemouth", "Chelsea", "Crystal Palace", "Everton", "Leicester City", "Liverpool", "Manchester United", "Manchester City", "Newcastle United", "Norwich City", "Southampton", "Stoke City", "Sunderland", "Swansea City", "Tottenham Hotspur", "Watford", "West Brom", "West Ham United"};

    String[] Menu = {"Choose Team", "Create Profile","Load Game", "Credits" ,    "Quit" , "Save Game" , "League Table"};

    public MainMenu(ClubInfo club){

    // clubName = club; // cast object club, to make it a String e.g clubName?
        //constructor
        }

    public static void main(String args[]){

        MainMenu team = new MainMenu(club);

    }

更多来自主菜单。爪哇

case 2: 
    Serialize saveclub1 = new Serialize();
    saveclub1.Serialize(club , club_one);
    exit = true;    
    break;

case 6:
    Serialize saveclub2 = new Serialize();
    saveclub2.Serialize(club , club_one);
    exit = true;
    break; 

序列化。爪哇

import java.util.InputMismatchException;
import java.util.Scanner;
import java.io.*;
import java.util.Arrays;

public class Serialize
{

    public Serialize(){
    //constructor
    }
   public void Serialize(ClubInfo club , Club1 club_one) // receive return type from printGreeting();
   {

      String fileName = club.teamName + ".ser";


      try {
         FileOutputStream fileOut = new FileOutputStream("/home/cg/root/" + fileName);
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(club);
         out.close();
         fileOut.close();

      System.out.printf("Serialized data is saved in C:/tmp/club.ser");
      }catch(IOException i)
      {
          i.printStackTrace();
      }

   }
}

import java.util.InputMismatchException;
import java.util.Scanner;
import java.io.*;
import java.util.Arrays;
/**
 *
 * @author Darren Estcourt
 */

   public class ClubInfo implements java.io.Serializable{

    public ClubInfo(){
    //constructor
    }

   public String teamName;
   public String stadium;
   public String division;
   public transient int SSN;
   public int stadiumCapacity;

} // end ClubInfo class

-------------------------------------------------------------------------------

public class Club1{

    public Club1(){
    //constructor
    }


    public void club_one(ClubInfo club){

    club.teamName = "Arsenal";
      club.stadium = "Emirates";
      club.division = "Premier League";
      club.SSN = 11122333;
      club.stadiumCapacity = 60000;

      }

}

简而言之,我如何确保“俱乐部”和“俱乐部一号”被我的“主菜单”类识别。以前我一直依赖于继承来传递值,但我已经了解到构造函数和对象是我可能要寻找的

我是个新手,非常感谢您的帮助:)


共 (1) 个答案

  1. # 1 楼答案

    错误出现在MainMenu,而不是Serialize。更具体地说,这两条线:

    saveclub1.Serialize(club , club_one);
    saveclub2.Serialize(club , club_one);
    

    您从未声明过任何名为clubclub_one的变量,但尝试将它们作为参数传递给函数


    您的代码还有一些其他问题,我认为在您尝试修复破坏代码的问题之前,需要解决这些问题

    问题1

    “Serialize”是一个动词,表示它应该是方法,而不是类。你可以把它变成ClubInfo的方法。然后,保存俱乐部的语法变成:

    ClubInfo myClub = new ClubInfo(arg1, arg2, arg3);
    myClub.serialize();
    

    问题2

    你的代码混淆了实例。你把Club1变成了一个类,把club_one变成了一个方法。一号俱乐部真的应该是ClubInfo的一个例子

    ClubInfo club1 = new ClubInfo();
    club1.teamName = "Arsenal";
    club1.stadium = "Emirates";
    

    问题3

    您依赖调用者来初始化变量。初始化是构造函数的工作

    public ClubInfo (String teamName, String stadium) {
        this.teamName = teamName;
        this.stadium = stadium;
    }
    
    // Example call to the constructor
    Club club1 = new Club("Arsenal", "Emirates");
    

    问题4

    在名为Serialize的类中有一个名为Serialize()的方法。如果必须有一个序列化类(请参见问题1了解为什么我认为不应该),请将其重命名为Serializer

    问题5

    如果在try块中途发生异常,则无法关闭流。关闭流的正确方法是在try块之前初始化流,然后在finally块中关闭它们:

        FileOutputStream fileOut = null;
        try {
            fileOut = new FileOutputStream("");
            // Do something with the stream
        } catch(IOException i) {
            // Handle error
        } finally {
            try {
                if (fileOut != null) {
                    fileOut.close();
                }
            } catch (IOException ex) {
                // Ignore exception
            }
        }
    

    The new way要短得多。这被称为“尝试资源”

        try (FileOutputStream fileOut = new FileOutputStream("")) {
            // Do something with the stream
        } catch(IOException i) {
            // Handle error
        }
    

    您可以将其扩展到多个资源。有这样的例子(a2)