您好我正在尝试将原子模拟应用程序作为我的学校项目。我已经创建了每个元素的数组,我将存储在Atomic数字中,将存储符号H中存储的原子数等等。我已经使用流阅读器读取了该文件,但是我很难将每个元素读入正确的数组。
Txt文件在这里
1,H,Hydrogen,1,1+
3,Li,Lithium,7,1+
11,Na,Sodium,23,1+
19,K,Potassium,39,1+
37,Rb,Rubidium,85,1+
55,Cs,Casesium,133,1+
87,Fr,Francium,223,1+
4,Be,Beryllium,9,2+
12,Mg,Magnesium,24,2+
20,Ca,Calcium,40,2+
38,Sr,Strontium,88,2+
56,Ba,Barium,137,2+
88,Ra,Radium,226,2+
5,B,Boron,10,3+
13,Al,Aluminium,27,3+
31,Ga,Gallium,70,3+
49,In,Indium,115,3+
81,Tl,Thallium,204,3+
6,C,Carbon,12,0
14,Si,Silicon,28,0
32,Ge,Germanium,73,0
50,Sn,Tin,119,0
82,Pb,Lead,207,0
7,N,Nitrogen,14,3-
15,P,Phosphorus,31,3-
33,As,Arsenic,75,3-
51,Sb,Antimony,122,3-
83,Bi,Bismuth,209,3-
8,O,Oxygen,16,2-
16,S,Sulfur,32,2-
34,Se,Selenium,79,2-
52,Te,Tellurium,128,2-
84,Po,Polonium,209,2-
9,F,Fluorine,19,1-
17,Cl,Chlorine,35,1-
35,Br,Bromine,80,1-
53,I,Iodine,127,1-
85,At,Astatine,210,1-
2,He,Helium,4,0
10,Ne,Neon,20,0
18,Ar,Argon,40,0
36,Kr,Kryoton,85,0
54,Xe,Xenon,131,0
86,Rn,Radon,222,0
struct TAtom
{
public int atomicNumber;
public string symbol;
public string name;
public int mass;
public string charge;
}
class Atom
{
static void Main(string[] args)
{
{
TAtom[] Atom = new TAtom[44];
Atom[0].atomicNumber = 1;
TAtom[] Symbol = new TAtom[44];
Symbol[1].symbol = "";
TAtom[] Name = new TAtom[44];
Name[2].name = "";
TAtom[] Mass = new TAtom[44];
Mass[3].mass = '1';
TAtom[] Charge = new TAtom[44];
Charge[4].charge = "";
string[] words;
StreamReader File = new StreamReader(@"JUNK1.txt");
while (File.EndOfStream == false)
{
string line = File.ReadLine();
words = line.Split(',');
}
File.Close();
}
}
}
答案 0 :(得分:1)
此变量包含文件中“line”(或“record”)的数据:
words = line.Split(',');
这样的记录看起来像这样:
1,H,Hydrogen,1,1+
假设数据是一致的(如果不是,你想在各个地方添加错误检查),那么你可以像这样构建TAtom
的实例:
var atom = new TAtom
{
atomicNumber = int.Parse(words[0]),
symbol = words[1],
name = words[2],
mass = int.Parse(words[3]),
charge = words[4]
};
潜在的运行时错误包括但不限于:
int
数据会导致int.Parse()
发生异常。考虑使用int.TryParse()
作为替代方案。这需要将这一行代码重构为多行,分别读取输入并在最后构建TAtom
实例。words
上尝试访问无效索引时,不完整的“记录”会导致异常。在尝试使用之前,您可以检查words
的长度。查看代码在调试器中执行的操作符合您的最佳利益。当您在执行代码时逐步执行每行代码时,您可以看到变量中的内容。检查words
的运行时内容是您构建TAtom
实例的最大线索。
在上面的atom
变量中有此实例后,您可以将其添加到任何数组/列表/集合/等。你喜欢。 (请参阅我对上述关于您的整体设计方法的问题的评论。)
答案 1 :(得分:-1)
我会先读取数据,就像你正在做的那样。由于每一行都是TAtom,因此将新的TAtom分配给逗号分隔的单词(line)数组的相应标记,然后将为每行创建的原子添加到数组或arraylist中。
$> curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash
现在,您可以通过List<TAtom> atomList = new List<TAtom>();
StreamReader File = new StreamReader(@"JUNK1.txt");
while (File.EndOfStream == false)
{
string line = File.ReadLine();
TAtom tatom = new TAtom();
words = line.Split(',');
tatom.atomicNumber=words[0]
tatom.symbol=words[1]
tatom.name=words[2]
tatom.mass=words[3]
tatom.charge=words[4]
//add the current line's atom to a data structure
atomList.Add(tatom);
}
File.Close();
!