我制作了两个班级,一个名为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());
}}
任何人都可以帮助我吗?
答案 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;