【问题标题】:Read text file into object array of objects?将文本文件读入对象的对象数组?
【发布时间】:2014-12-28 16:54:08
【问题描述】:

有没有办法将文本文件读入对象数组?我已经设法使用字符串的对象数组来做到这一点 - 但我无法弄清楚如何使用对象的对象数组来做到这一点。即卡片的 Hand 对象数组。这是我的代码;

try {
            FileReader fr = new FileReader(file_name);
            BufferedReader buf = new BufferedReader(fr);
            //Create temporary arraylist to store hand
            ArrayList<Hand> tempHand = new ArrayList<>();
            Hand hand;

            int numLines = 0;
            String lineHand;
            while ((lineHand = buf.readLine()) != null){
            numLines++;
            //Initialise new empty hand object 
            hand = new Hand();
            //Add hand 
            hand.addHand(lineHand);
            //Add hand to temporary array
            tempHand.add(hand);

        }
            //display hands
            for (int i =0; i<tempHand.size(); i++){
                System.out.println(tempHand.get(i).getHand());
            }

        }
        catch(IOException e) {
            e.printStackTrace();
        }

通过上面的代码,我可以看到哪里出了问题,但我不知道如何解决它。我曾尝试让 lineHand 键入 Hand 而不是字符串,但后来我在使用 buf.readline() 时遇到了问题。关于如何解决这个问题的任何想法?

【问题讨论】:

  • 你到底追求什么?读取文件时要获取 Hand 对象而不是 String?
  • 如果你想要一个 Hand 对象,那么在循环中创建一个 Hand 的实例,在 Hand 对象的一个​​实例变量中设置 String 的值,然后在 Array/ArrayList 中设置 hand 对象
  • 是的,我想从文件中获取一个 Hand 对象,然后将 Hand 放入一个数组列表中以备后用。
  • 那么你就可以进行序列化了。

标签: java arrays object bufferedreader readfile


【解决方案1】:

一张牌是一对值:点数和花色。

public enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES }
public enum Rank {
  TWO("2"), THREE("3"),... JACK("J"), QUEEN("Q"), KING("K"), ACE("A");
  String rep;
  Rank( String rep ){
    this.rep = rep;
  }
  public getRep(){
   return rep;
  }    
} 

public class Card {
  private Rank rank;
  private Suit suit;
  public Card( Rank rank, Suit suit ){
    this.rank = rank;
    this.suit = suit;
  }
}

什么是一手牌取决于游戏,但包含Set&lt;Card&gt; 的类非常适合单副牌游戏。

现在:如何读取卡片?还有甲板?

卡片的表示形式可以是"CLUBS 2",即文本文件中的字符序列。使用扫描仪依次获取一个令牌(“CLUBS”、“2”),并将字符串值转换为枚举值。 (enum Rank 中缺少一些内容,您必须添加。)但对于 enum Suit 来说很简单。

至于 Hand:这只是一系列 Card 对象,按上述方式读取并添加到 Hand 对象的 Set&lt;Card&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2022-09-26
    相关资源
    最近更新 更多