如何将String数组存储为枚举类型

时间:2015-12-02 13:49:07

标签: java arrays type-conversion readfile

我制作了两个班级,一个名为Card,另一个名为Pack。 Card类具有以下属性:

private String Name;
private int Magic;
private int Cunning;
private int Courage;
private int Wisdom;
private int Temper;

在Pack类中,我制作了一个文件阅读器方法,用于读取PC上的文件并将其每一行存储为字符串数组。例如,这是文本的一部分(不是代码):

 Pansy_Parkinson
 42
 21
 18
 19
 9
 Dean_Thomas
 40
 10
 35
 22
 4

My String array []将每一行存储为不同的索引。 我想做什么,就是将这个String数组转换为Card类型的数组。 它应该在每个索引中存储一个具有6个属性的卡片。

所以我想我需要有一个方法来转换它,我将以这种方式基于之前的文本获得我的新2D卡阵列:

Card [][] ArrayOfCards = new Card [1][5];

请知道我怎么能这样做?

............................................... ........... .................................................. ........

非常感谢大家的宝贵帮助! 我尝试了所有代码,看起来很棒!但我不知道为什么它会在我的主要或方法本身中向我显示错误。

这是我的FileReader类!

import java.io.File;
import java.util.Arrays;
import java.io.*; //To deal with exceptions
import java.util.*;
import java.util.Scanner;
import java.util.ArrayList;

public class ReadFile {

        private Scanner x;
        private String Path;

        public ReadFile (String ThePath){
            Path = ThePath;
        }

        public String[] openFile() throws IOException /*To throw any errors up the line*/
        {
            FileReader FR = new FileReader(Path);
            BufferedReader TextReader = new BufferedReader(FR);

            int NoOfLines = readLines();
            String[] TextData = new String[NoOfLines];

            for (int i = 0; i < NoOfLines; i++)
                TextData[i] = TextReader.readLine(); //Accesses the lines of text and stores them in the array

            TextReader.close();
            return TextData;
        }

        int readLines() throws IOException //Return the number of lines in the text
        {
            FileReader FR2 = new FileReader(Path);
            BufferedReader BF = new BufferedReader(FR2);

            String ALine;
            int NoOfLines = 0;

            while ((ALine = BF.readLine()) != null)//Read each line of text & stop when a null value's reached
            NoOfLines++;

            BF.close();
            return NoOfLines;
        }

}

我刚刚在main上阅读了它:

 public static void main(String[] args) {
        // TODO code application logic here

        String FileName = "C:/Users/Anwar/Desktop/Potter.txt"; //Path of the file on my PC
        try {
            ReadFile File = new ReadFile(FileName); 
            String[] ArrayLines = File.openFile();
            for(int i = 0; i < ArrayLines.length; i++) 
                System.out.println(ArrayLines[i]);
            }
        catch (IOException e) /*Defiend object of type IOException*/ {
            System.out.println(e.getMessage());
        }}

任何人都可以帮助我吗?

6 个答案:

答案 0 :(得分:0)

因为你的问题有一个c#标签我决定给你一个c#例子,你应该可以很容易地将它转换成java。

基本上我已经创建了一个console.log("Hello, World!"); 类,它有一个构造函数,可以接受有关卡的6个统计信息。我保留了字段Card,因为这是他们在你的问题中的方式。 我创建了一个private循环,它遍历数组中的每个项目,有效地一次获取6个项目并将它们传递给for构造函数。然后,我们将此Card添加到card的{​​{1}}。

我还提供了一个快速List扩展程序来整理Cards实例化。

有更好的方法可以做到这一点,但这解决了你向我们提出的问题。此示例中也没有错误处理。

ToInt()

答案 1 :(得分:0)

也许试着这样做:

使用param String array [] []为Card创建构造函数,它将是从文本文件和第二个param创建的数组,它将是将在何处搜索构造函数的数据的int数

构造函数应该像这样工作:

$users.each |String $user| {
  $resources.each |String $vhost| {
    rabbitmq_user_permissions {"${user}@${vhost}":
                    configure_permission => '.*',
                    read_permission      => '.*',
                    write_permission     => '.*',}
                        }
                      }

然后你可以使用这个构造函数将新的Card对象放到Array,List或任何你想要的东西

答案 2 :(得分:0)

您应该为您的班级卡创建getter / setter,然后您可以使用此功能。我不知道你使用哪种语言(c#或java),所以你必须调整解决方案。

Card(String[][] array, int numberForConstructor){

this.name = array[numberForConstructor][0];
this.magic = array[numberForConstructor][1];
this.cunning = array[numberForConstructor][2];
this.courage = array[numberForConstructor][3];
this.temper = array[numberForConstructor][4];
}

然后你要创建一个新包,只需执行以下操作

public class Pack
{
    public List<Card> cards = new List<Card>();

    public Pack(string filename)
    {
        // Your parsing function
        while ((line = readLine() != null)
        {
            Card c = new Card();
            c.setName(line);
            c.setMagic(Convert.ToInt32(readLine());
            c.setCunning(Convert.ToInt32(readLine());
            c.setCourage(Convert.ToInt32(readLine());
            c.setWisdom(Convert.ToInt32(readLine());
            c.setTemper(Convert.ToInt32(readLine());
            cards.add(c);
        }
    }
}

答案 3 :(得分:0)

它表示您的输入数组每行有一个卡参数。所以我认为你只是在寻找这样的东西:

public static Card[] convert(String[] arr){
    if(arr.length % 6 != 0){
        System.out.println("error in data");
        return null;
    }
    Card[] res = new Card[arr.length / 6];

    for(int i = 0; i < res.length; i++){
        String Name = arr[(i * 6) + 0];
        int Magic = Integer.parseInt(arr[(i * 6) + 1]);
        int Cunning  = Integer.parseInt(arr[(i * 6) + 2]);
        int Courage = Integer.parseInt(arr[(i * 6) + 3]);
        int Wisdom = Integer.parseInt(arr[(i * 6) + 4]);
        int Temper = Integer.parseInt(arr[(i * 6) + 5]);
        res[i] = new Card(Name, Magic, Cunning, Courage, Wisdom, Temper);
    }

    return res;
}

答案 4 :(得分:0)

这可行:

public Card ConvertArrayToCard(string[] array)
{
       Card card = new Card;
       card.Name = array[0];
       card.Magic= array[1];
       card.Cunning= array[2];
       card.Courage= array[3];
       card.Wisdom= array[4];
       card.Temper= array[5];
 }

答案 5 :(得分:0)

相当多的答案..这是另一个答案。

你的班级;

public class Pack
{
   public string Name { get; set; }
   public int Magic { get; set; }
   public int Cunning { get; set; }
   public int Courage { get; set; }
   public int Wisdom { get; set; }
   public int Temper { get; set; }
}

然后是逻辑。这里有一些内置的防御编码机制。我会让你弄明白的。

            var lines = File.ReadAllLines(@"C:\temp2.txt");
            List<Pack> mypack =  new List<Pack>();
            Pack member = null;
            int count = 0;
            foreach (var line in lines)
            {
                int val;
                count = (!int.TryParse(line, out val)) ? 0 : count + 1;
                switch (count)
                {
                    case 0:
                        member = new Pack() { Name = line.Trim() };
                        break;
                    case 1:
                        member.Magic = val;
                        break;
                    case 2:
                        member.Cunning = val;
                        break;
                    case 3:
                        member.Courage = val;
                        break;
                    case 4:
                        member.Wisdom = val;
                        break;
                    case 5:
                        member.Temper = val;
                        mypack.Add(member);
                        break;
                }
            }
            return mypack;