2016-09-29 38 views
0

我在他们的桌子上放置的顺序大部分在元素周期表中的元素的列表:C#的输入与一个字符串完全

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Chemistry_Element_Calculator 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Declare all numbers 
      int electronNumber; 
      int protonNumber; 
      float neutronNumber; 
      int i; 

      // Declare all strings 
      string elementRequest; 

      // Create an list for all elements 
      List<string> elementNameList = new List<string>(); 
      List<string> elementSymbolList = new List<string>(); 

      // Add all elements to the list 
      elementNameList.Add("Hydrogen"); elementSymbolList.Add("H"); 
      elementNameList.Add("Helium"); elementSymbolList.Add("He"); 
      elementNameList.Add("Lithium"); elementSymbolList.Add("Li"); 
      elementNameList.Add("Beryllium"); elementSymbolList.Add("Be"); 
      elementNameList.Add("Boron"); elementSymbolList.Add("B"); 
      elementNameList.Add("Carbon"); elementSymbolList.Add("C"); 
      elementNameList.Add("Nitrogen"); elementSymbolList.Add("N"); 
      elementNameList.Add("Oxygen"); elementSymbolList.Add("O"); 
      elementNameList.Add("Fluorine"); elementSymbolList.Add("F"); 
      elementNameList.Add("Neon"); elementSymbolList.Add("Ne"); 
      elementNameList.Add("Sodium"); elementSymbolList.Add("Na"); 
      elementNameList.Add("Magnesium"); elementSymbolList.Add("Mg"); 
      elementNameList.Add("Aluminium"); elementSymbolList.Add("Al"); 
      elementNameList.Add("Silicon"); elementSymbolList.Add("Si"); 
      elementNameList.Add("Phosphorus"); elementSymbolList.Add("P"); 
      elementNameList.Add("Sulfur"); elementSymbolList.Add("S"); 
      elementNameList.Add("Chlorine"); elementSymbolList.Add("Cl"); 
      elementNameList.Add("Argon"); elementSymbolList.Add("Ar"); 
      elementNameList.Add("Potassium"); elementSymbolList.Add("K"); 
      elementNameList.Add("Calcium"); elementSymbolList.Add("Ca"); 
      elementNameList.Add("Scandium"); elementSymbolList.Add("Sc"); 
      elementNameList.Add("Titanium"); elementSymbolList.Add("Ti"); 
      elementNameList.Add("Vanadium"); elementSymbolList.Add("V"); 
      elementNameList.Add("Chromium"); elementSymbolList.Add("Cr"); 
      elementNameList.Add("Manganese"); elementSymbolList.Add("Mn"); 
      elementNameList.Add("Iron"); elementSymbolList.Add("Fe"); 
      elementNameList.Add("Cobalt"); elementSymbolList.Add("Co"); 
      elementNameList.Add("Nickel"); elementSymbolList.Add("Ni"); 
      elementNameList.Add("Copper"); elementSymbolList.Add("Cu"); 
      elementNameList.Add("Zinc"); elementSymbolList.Add("Zn"); 
      elementNameList.Add("Gallium"); elementSymbolList.Add("Ga"); 
      elementNameList.Add("Germanium"); elementSymbolList.Add("Ge"); 
      elementNameList.Add("Arsenic"); elementSymbolList.Add("As"); 
      elementNameList.Add("Selenium"); elementSymbolList.Add("Se"); 
      elementNameList.Add("Bromine"); elementSymbolList.Add("Br"); 
      elementNameList.Add("Krypton"); elementSymbolList.Add("Kr"); 
      elementNameList.Add("Rubidium"); elementSymbolList.Add("Rb"); 
      elementNameList.Add("Strontium"); elementSymbolList.Add("Sr"); 
      elementNameList.Add("Yttrium"); elementSymbolList.Add("Y"); 
      elementNameList.Add("Zirconium"); elementSymbolList.Add("Zr"); 
      elementNameList.Add("Niobium"); elementSymbolList.Add("Nb"); 
      elementNameList.Add("Molybdenum"); elementSymbolList.Add("Mo"); 
      elementNameList.Add("Technetium"); elementSymbolList.Add("Tc"); 
      elementNameList.Add("Rubidium"); elementSymbolList.Add("Ru"); 
      elementNameList.Add("Rhodium"); elementSymbolList.Add("Rh"); 
      elementNameList.Add("Palladium"); elementSymbolList.Add("Pd"); 
      elementNameList.Add("Silver"); elementSymbolList.Add("Ag"); 
      elementNameList.Add("Cadmium"); elementSymbolList.Add("Cd"); 
      elementNameList.Add("Indium"); elementSymbolList.Add("In"); 
      elementNameList.Add("Tin"); elementSymbolList.Add("Sn"); 
      elementNameList.Add("Antimony"); elementSymbolList.Add("Sb"); 
      elementNameList.Add("Tellurium"); elementSymbolList.Add("Te"); 
      elementNameList.Add("Iodine"); elementSymbolList.Add("I"); 
      elementNameList.Add("Xenon"); elementSymbolList.Add("Xe"); 
      elementNameList.Add("Caesium"); elementSymbolList.Add("Cs"); 
      elementNameList.Add("Barium"); elementSymbolList.Add("Ba"); 
      elementNameList.Add("Lanthanum"); elementSymbolList.Add("La"); 
      elementNameList.Add("Cerium"); elementSymbolList.Add("Ce"); 
      elementNameList.Add("Praseodynium"); elementSymbolList.Add("Pr"); 
      elementNameList.Add("Neodymium"); elementSymbolList.Add("Nd"); 
      elementNameList.Add("Promethium"); elementSymbolList.Add("Pm"); 
      elementNameList.Add("Samarium"); elementSymbolList.Add("Sm"); 
      elementNameList.Add("Europium"); elementSymbolList.Add("Eu"); 
      elementNameList.Add("Gadolinium"); elementSymbolList.Add("Gd"); 
      elementNameList.Add("Terbium"); elementSymbolList.Add("Tb"); 
      elementNameList.Add("Dysprosium"); elementSymbolList.Add("Dy"); 
      elementNameList.Add("Holomium"); elementSymbolList.Add("Ho"); 
      elementNameList.Add("Erbium"); elementSymbolList.Add("Er"); 
      elementNameList.Add("Thulium"); elementSymbolList.Add("Tm"); 
      elementNameList.Add("Ytterbium"); elementSymbolList.Add("Yb"); 
      elementNameList.Add("Lutenium"); elementSymbolList.Add("Lu"); 
      elementNameList.Add("Hafnium"); elementSymbolList.Add("Hf"); 
      elementNameList.Add("Tantalum"); elementSymbolList.Add("Ta"); 
      elementNameList.Add("Tungsten"); elementSymbolList.Add("W"); 
      elementNameList.Add("Rhenium"); elementSymbolList.Add("Re"); 
      elementNameList.Add("Osmium"); elementSymbolList.Add("Os"); 
      elementNameList.Add("Iridium"); elementSymbolList.Add("Ir"); 
      elementNameList.Add("Platinum"); elementSymbolList.Add("Pt"); 
      elementNameList.Add("Gold"); elementSymbolList.Add("Au"); 
      elementNameList.Add("Mercury"); elementSymbolList.Add("Hg"); 
      elementNameList.Add("Thallium"); elementSymbolList.Add("Tl"); 
      elementNameList.Add("Lead"); elementSymbolList.Add("Pb"); 
      elementNameList.Add("Bismuth"); elementSymbolList.Add("Bi"); 
      elementNameList.Add("Polonium"); elementSymbolList.Add("Po"); 
      elementNameList.Add("Astatine"); elementSymbolList.Add("At"); 
      elementNameList.Add("Radon"); elementSymbolList.Add("Rn"); 
      elementNameList.Add("Francium"); elementSymbolList.Add("Fr"); 
      elementNameList.Add("Radium"); elementSymbolList.Add("Ra"); 
      elementNameList.Add("Actinium"); elementSymbolList.Add("Ac"); 
      elementNameList.Add("Thorium"); elementSymbolList.Add("Th"); 
      elementNameList.Add("Palladium"); elementSymbolList.Add("Pa"); 
      elementNameList.Add("Uranium"); elementSymbolList.Add("U"); 
      elementNameList.Add("Nepturium"); elementSymbolList.Add("Np"); 
      elementNameList.Add("Plutonium"); elementSymbolList.Add("Pu"); 
      elementNameList.Add("Americium"); elementSymbolList.Add("Am"); 
      elementNameList.Add("Curium"); elementSymbolList.Add("Cm"); 
      elementNameList.Add("Berkelium"); elementSymbolList.Add("Bk"); 
      elementNameList.Add("Californium"); elementSymbolList.Add("Cf"); 
      elementNameList.Add("Einsteinium"); elementSymbolList.Add("Es"); 
      elementNameList.Add("Fermium"); elementSymbolList.Add("Fermium"); 
      elementNameList.Add("Mendelevium"); elementSymbolList.Add("Md"); 
      elementNameList.Add("Nobelium"); elementSymbolList.Add("No"); 
      elementNameList.Add("Lawrencium"); elementSymbolList.Add("Lr"); 
      elementNameList.Add("Rutherfordium"); elementSymbolList.Add("Rf"); 
      elementNameList.Add("Dubnium"); elementSymbolList.Add("Db"); 
      elementNameList.Add("Seaborgium"); elementSymbolList.Add("Sg"); 
      elementNameList.Add("Bohrium"); elementSymbolList.Add("Bh"); 
      elementNameList.Add("Hassium"); elementSymbolList.Add("Hs"); 
      elementNameList.Add("Meitnerium"); elementSymbolList.Add("Mt"); 
      elementNameList.Add("Darmstadtium"); elementSymbolList.Add("Ds"); 
      elementNameList.Add("Roentgenium"); elementSymbolList.Add("Rg"); 
      elementNameList.Add("Copernicium"); elementSymbolList.Add("Cn"); 

      Console.WriteLine("What element do you want? Either input it's full name, with a capital letter, or it's elemnent symbol. E.g. N for Nitrogen"); 
      elementRequest = Console.ReadLine(); 


      elementNameList.ForEach(delegate (String elementName) 
       { 
        if (elementRequest == elementName) 
        { 
         Console.WriteLine("Hydrogen"); 
        } 
        else 
        { 
         Console.WriteLine("Not Hydrogen"); 
        }; 
       }); 
      Console.Read(); 

然而,当我运行该程序,并输入氢气,氦气和氢气据说都是氢气。我怎样才能解决这个问题?

此外,如果任何人有关于如何使他们更小的压缩2只列出了一个主意,让我知道:)

谢谢:)

+4

我想用'Dictionary'来达到这个目的 – fubo

+3

'Console.writeline(“Hydrogen”)'总是会说它是氢气,如果它找到了请求的元素。写'Console.writeline(elementName&“已经在列表中找到)' –

+0

你也需要在元素被找到之后使用'break'。 –

回答

3

你的代码做的是什么从第一个列表中获取索引,并在第二个列表中的相同索引处返回该字符串。

你的代码目前没有这样做,但总是打印“氢气”,因此你的输出始终是“氢气”,无论什么元素的要求。

你可以平凡解决这个问题通过实际查找索引:

int indexOfElementName = elementNameList.IndexOf(elementRequest); 
string elementSymbol = elementSymbolList[indexOfElementName]; 

注意,不处理外壳,并要求不在列表(或错别字)元素。

但是保持两个列表同步,并且这个代码通常是等待发生的维护灾难。

相反,你可以使用一本字典,其中的元素名称为键和符号价值:

var elementDictionary = new Dictionary<string, string> 
{ 
    { "Hydrogen", "H" }, 
    { "Helium", "He" }, 
    // ... 
} 

然后看看它:

string elementSymbol = elementDictionary[elementRequest]; 

注意,这仍然不处理不区分大小写和找不到的元素,但我会将其作为练习留给您。

+0

哪个更快的字典或散列表? – Sherlock

+1

我对_“哪个更快”的回答一般是“在你证明是一个问题之前你不应该关心”。 – CodeCaster

+0

不错的答案。如果在ff数据结构 – Sherlock

3

我会使用自定义类和列表作为suggested by ElectricRouge

我不喜欢字典,因为你需要按名称和符号搜索。此外,数据集很小(迄今为止有118个元素)。

查看关于代码解释的注释。

using System; 
using System.Collections.Generic; 

namespace Chemistry_Element_Calculator 
{ 
    // Create a chemical element class 
    // You can add more properties such as number of electrons, etc. 
    public class ChemicalElement 
    { 
     public string Symbol 
     { 
      get; set; 
     } 

     public string Name 
     { 
      get; set; 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Create a list of the elements, populate their properties 
      var elements = new List<ChemicalElement>() 
      { 
       new ChemicalElement {Name = "Hydrogen", Symbol = "H"}, 
       new ChemicalElement {Name = "Helium", Symbol = "He"}, 
       new ChemicalElement {Name = "Lithium", Symbol = "Li"} 
       // etc. 
      }; 

      Console.WriteLine("What element do you want? Either input it's full name, with a capital letter, or it's elemnent symbol. E.g. N for Nitrogen"); 
      var elementRequest = Console.ReadLine(); 

      // Use find to get a matching element, compare both name and symbol 
      var foundElement = elements.Find(element => element.Symbol == elementRequest || element.Name == elementRequest); 

      if (foundElement == null) 
      { 
       // Output if no element is found 
       Console.WriteLine("Element Not Found"); 
      } 
      else 
      { 
       // Output if the element is found 
       Console.WriteLine("Found element {0}.", foundElement.Name); 
      } 

      Console.WriteLine("[Press any key to finish]"); 
      Console.ReadKey(); 
     } 
    } 
} 

代码使用方法List.Find得到的结果,只会返回第一个匹配。

如果您想要区分大小写的比较,我还建议迁移到String.Compare

最后我会读数据表单文件或数据库,但这是超出了问题。

+0

我也会试试。谢谢! :d – Bob