首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在另一个类中使用“main”方法中的变量?串行化

如何在另一个类中使用“main”方法中的变量?串行化
EN

Stack Overflow用户
提问于 2015-05-06 20:19:04
回答 2查看 741关注 0票数 0

新手来了!在Java中使用Save/Load时,我被踩了一下。我的代码正确地保存和加载了所有内容,但我无法让这些加载变量在加载类中的“公共静态void”之外的任何地方使用。我的意思是:

我有一个储蓄类,它工作得很好:

代码语言:javascript
复制
package com.mestru.esport;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.Random;

public class NewPlayer {

public static void main (String args[])
{
    Random rand = new Random();

    int naturalTalent = rand.nextInt(10);
    int luck = rand.nextInt(20);
    int figure = rand.nextInt(50);
    int agility = rand.nextInt(30);
    int intelligence = rand.nextInt(30);
    int multiTasking = rand.nextInt(30);
    int stamina = rand.nextInt(30);

    try
    {
        FileOutputStream saveFile = new FileOutputStream("Player.sav");
        ObjectOutputStream save = new ObjectOutputStream(saveFile);

        save.writeObject(naturalTalent);
        save.writeObject(luck);
        save.writeObject(figure);
        save.writeObject(agility);
        save.writeObject(intelligence);
        save.writeObject(multiTasking);
        save.writeObject(stamina);

        save.close();
    }
    catch(Exception exc)
    {
        exc.printStackTrace();
    }
}
}

然后,我有一个类,它的目的是加载并使加载的变量在其他类中可用。如果加载部分是完美无缺的,那么我就不能在“main”方法之外使用它们。

代码语言:javascript
复制
package com.mestru.esport;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.Random;

public class Player
{
int naturalTalent;
int luck;
int figure;
int agility;
int intelligence;
int multiTasking;
int stamina;

public static void main (String args[]) {

    int NEWnaturalTalent = 0;
    int NEWluck = 0;
    int NEWfigure = 0;
    int NEWagility = 0;
    int NEWintelligence = 0;
    int NEWmultiTasking = 0;
    int NEWstamina = 0;


    try {
        FileInputStream saveFile = new FileInputStream("Player.sav");
        ObjectInputStream save = new ObjectInputStream(saveFile);

        NEWnaturalTalent = (Integer) save.readObject();
        NEWluck = (Integer) save.readObject();
        NEWfigure = (Integer) save.readObject();
        NEWagility = (Integer) save.readObject();
        NEWintelligence = (Integer) save.readObject();
        NEWmultiTasking = (Integer) save.readObject();
        NEWstamina = (Integer) save.readObject();

        save.close();
    } catch (Exception exc) {
        exc.printStackTrace();
    }
    Player player = new Player();

    player.naturalTalent = NEWnaturalTalent;
    player.luck = NEWluck;
    player.figure = NEWfigure;
    player.agility = NEWagility;
    player.intelligence = NEWintelligence;
    player.multiTasking = NEWmultiTasking;
    player.stamina = NEWstamina;

}

public void test ()
{
    System.out.println("Natural Talent: " + naturalTalent);
    System.out.println("Luck: " + luck);
    System.out.println("Figure: " + figure);
    System.out.println("Agility: " + agility);
    System.out.println("Intelligence: " + intelligence);
    System.out.println("Multitasking: " + multiTasking);
    System.out.println("Stamina: " + stamina);
}

}

当我在另一个类中使用方法'test‘时,所有值都等于0。

这是我的问题。我能否以某种方式使我的所有实例变量相等于在“main”方法中加载的实例变量?我也不能用‘主’之外的“尝试”方法:

谢谢你的帮助-每条线索都很感激,我才刚开始学习。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-06 20:24:48

加载时,创建一个新播放机,设置它,然后丢弃它。

也许您打算设置当前播放机的字段。

另外,您也不需要临时变量。你可以把田地设置好。

代码语言:javascript
复制
public static void main(String... ignored) throws IOException {
    Player player = new Player();
    player.load("Player.sav");
    player.test();
}

public void load(String filename) throws IOException {
  try (FileInputStream saveFile = new FileInputStream(filename);
    ObjectInputStream save = new ObjectInputStream(saveFile)) {
    naturalTalent = (Integer) save.readObject();
    luck = (Integer) save.readObject();
    figure = (Integer) save.readObject();
    agility = (Integer) save.readObject();
    intelligence = (Integer) save.readObject();
    multiTasking = (Integer) save.readObject();
    stamina = (Integer) save.readObject();
  }
}

与以二进制形式写入此数据不同,您可以将其写入文本。这将使阅读/编辑变得更容易,并且在这个用例中它将更加紧凑。例如,序列化Integer对象可能会令人惊讶。

票数 1
EN

Stack Overflow用户

发布于 2015-05-06 22:11:55

主类JavaCode

代码语言:javascript
复制
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Random;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestProgram {

    public static void main(String[] args) throws FileNotFoundException {
        // TODO Auto-generated method stub

        Random rand = new Random();
        ArrayList<Integer> arl = new ArrayList<Integer>();

        int naturalTalent = rand.nextInt(10);
        int luck = rand.nextInt(20);
        int figure = rand.nextInt(50);
        int agility = rand.nextInt(30);
        int intelligence = rand.nextInt(30);
        int multiTasking = rand.nextInt(30);
        int stamina = rand.nextInt(30);

        String fileName = "/Users/rk4262/Player.txt";
        try {
            // Assume default encoding.
            FileWriter fileWriter = new FileWriter(fileName);

            // Always wrap FileWriter in BufferedWriter.
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

            // Note that write() does not automatically
            // append a newline character.
            bufferedWriter.write("naturalTalent value is :" + naturalTalent);
            bufferedWriter.newLine();
            bufferedWriter.write("luck value is : " + luck);
            bufferedWriter.newLine();
            bufferedWriter.write("figure value is : " + figure);
            bufferedWriter.newLine();
            bufferedWriter.write("agility value is : " + agility);
            bufferedWriter.newLine();
            bufferedWriter.write("intelligence value is : " + intelligence);
            bufferedWriter.newLine();

            // Always close files.
            bufferedWriter.close();
        } catch (IOException ex) {
            System.out.println("Error writing to file '" + fileName + "'");
            // Or we could just do this:
            // ex.printStackTrace();
        }

        Player p = new Player();
        String s = p.readLine();
        System.out.println(s);

        Pattern pattern = Pattern.compile("[0-9]+");
        Matcher m = pattern.matcher(s);
        while (m.find()) {
            int n = Integer.parseInt(m.group());
            arl.add(n);

        }

        p.NEWnaturalTalent = arl.indexOf(0);
        p.NEWluck=arl.indexOf(1);
        p.NEWfigure=arl.indexOf(2);
        p.NEWagility=arl.indexOf(3);

    }

}

播放器类代码

代码语言:javascript
复制
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Random;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestProgram {

    public static void main(String[] args) throws FileNotFoundException {
        // TODO Auto-generated method stub

        Random rand = new Random();
        ArrayList<Integer> arl = new ArrayList<Integer>();

        int naturalTalent = rand.nextInt(10);
        int luck = rand.nextInt(20);
        int figure = rand.nextInt(50);
        int agility = rand.nextInt(30);
        int intelligence = rand.nextInt(30);
        int multiTasking = rand.nextInt(30);
        int stamina = rand.nextInt(30);

        String fileName = "/Users/rk4262/Player.txt";
        try {
            // Assume default encoding.
            FileWriter fileWriter = new FileWriter(fileName);

            // Always wrap FileWriter in BufferedWriter.
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

            // Note that write() does not automatically
            // append a newline character.
            bufferedWriter.write("naturalTalent value is :" + naturalTalent);
            bufferedWriter.newLine();
            bufferedWriter.write("luck value is : " + luck);
            bufferedWriter.newLine();
            bufferedWriter.write("figure value is : " + figure);
            bufferedWriter.newLine();
            bufferedWriter.write("agility value is : " + agility);
            bufferedWriter.newLine();
            bufferedWriter.write("intelligence value is : " + intelligence);
            bufferedWriter.newLine();

            // Always close files.
            bufferedWriter.close();
        } catch (IOException ex) {
            System.out.println("Error writing to file '" + fileName + "'");
            // Or we could just do this:
            // ex.printStackTrace();
        }

        Player p = new Player();
        String s = p.readLine();
        System.out.println(s);

        Pattern pattern = Pattern.compile("[0-9]+");
        Matcher m = pattern.matcher(s);
        while (m.find()) {
            int n = Integer.parseInt(m.group());
            arl.add(n);

        }

        p.NEWnaturalTalent = arl.indexOf(0);
        p.NEWluck=arl.indexOf(1);
        p.NEWfigure=arl.indexOf(2);
        p.NEWagility=arl.indexOf(3);

    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30086741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档