2016-09-30 7 views
0

再び私:DC# - ユーザーの入力に応じて、キーとその値を辞書に表示しますか?

これは私の現在のコードです:辞書リストの要素それぞれの原子番号の順であるとして

class Program 
    { 
     static void Main(string[] args) 
     { 
      // Declare all numbers 
      int electronNumber; 
      int protonNumber; 
      float neutronNumber; 
      int i; 
      int indexOfElementName; 
      int restartInt; 
      restartInt = 1; 

      // Declare all strings 
      string elementRequest; 
      string restartString; 

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

      }; 
       while (restartInt == 1) 
      { 
       Console.WriteLine("What element do you want? Either input it's full name, with a capital letter. E.g 'Hydrogen'"); 
       elementRequest = Console.ReadLine(); 
       string elementSymbol = elementDictionary[elementRequest]; 
       Console.WriteLine("Your element: " + elementRequest + " has the element symbol of: " + elementSymbol); 

        Console.WriteLine("Would you like to try again? Type '1' for yes, and '2' for no."); 
       restartString = Console.ReadLine(); 
       int.TryParse(restartString, out restartInt); 


      }; 
     } 
    } 

は、どのように私は、入力された要素の開始から数えることができるように私は元素の原子番号を見つけることができます。また、要素名とそのシンボルの両方を単純に出力するにはどうしたらいいですか?

elementRequest = "窒素" プリントアウトする必要があります: - "窒素" 要素がシンボル - "N" 7

私がしようとした= 要素の原子番号

要素名を例えば

辞書に追加するたびに1を加算するループを実行しますが、原子番号を辞書内の項目の合計数として出力し続けました。名前と記号の両方の印刷の場合

、(「窒素」、「N」)、ここでは上の別の素晴らしいヘルパーがどのようにシンボルを得るために私に語ったが、ライン:

のみ
string elementSymbol = elementDictionary[elementRequest]; 

要素名とそのシンボルではなくそのシンボルを表示します。なぜそれを修正するのかが完全にはわかりません。確かに[elementRequest]を入れることで、 "Hydrogen"と "H"の両方を見つける必要がありますか?私は何かを誤解していますか?

ご協力いただきましてありがとうございます。 :D

+0

作業は、あなたがこれまでに試したループを表示することができますか? –

+0

要素の順序を保存する場合は、辞書が順序を保証しないため、List >を使用する必要があります。 – ltiveron

+0

動作しなかったので削除しました。私はそれについて考えていますが、数字が変わらないので3番目のセクションを辞書に追加して、3つの部分すべてを印刷することはできますか?それは数字が原子名で保存されるので、順序が重要ではないのでアイデアは時代遅れになります。 @ltiveronはその行を置き換えますvar elementDictionary = new Dictionary Bob

答えて

2

おそらく要素を表すためのクラスを試してみてください。

public class Element 
{ 
    public string Name { get; set; } 
    public string Symbol { get; set;} 
    public int AtomicNumber { get; set; } 

    public Element(string name, string symbol, int atomicNumber) 
    { 
     Name = name; 
     Symbol = symbol; 
     AtomicNumber = atomicNumber; 
    } 
} 

次のように辞書に追加します。

var elementDictionary = new Dictionary<string, Element> 
{ 
     { "Hydrogen", new Element("Hydrogen", "H", 1) }, 
     { "Helium", new Element("Helium", "He", 2) }, 

     //etc. 
}; 

を使用すると、辞書でルックアップするときに、あなたが

elementRequest = Console.ReadLine(); 
var element = elementDictionary[elementRequest]; 
Console.WriteLine("Your element: " + element.Name + " has the element symbol of: " + element.Symbol + " and atomic number of: " + element.AtomicNumber); 

あなたはその後、追加することができ、すべてのプロパティにアクセスすることができますので、クラスを取得しますあなたの要素クラスに追加のプロパティを追加し、辞書から検索するときにそれらを利用できるようにします。

EDIT - 完全なコードはテストの結果、

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

namespace ConsoleApplication4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int restartInt; 
      restartInt = 1; 

      // Declare all strings 
      string elementRequest; 
      string restartString; 

      var elementDictionary = new Dictionary<string, Element> 
      { 
       { "Hydrogen", new Element("Hydrogen", "H", 1) }, 
       { "Helium", new Element("Helium", "He", 2) }, 

       //etc. 
      }; 

      while (restartInt == 1) 
      { 
       Console.WriteLine("What element do you want? Either input it's full name, with a capital letter. E.g 'Hydrogen'"); 

       elementRequest = Console.ReadLine(); 
       var element = elementDictionary[elementRequest]; 
       Console.WriteLine("Your element: " + element.Name + " has the element symbol of: " + element.Symbol + " and atomic number of: " + element.AtomicNumber); 

       Console.WriteLine("Would you like to try again? Type '1' for yes, and '2' for no."); 
       restartString = Console.ReadLine(); 
       int.TryParse(restartString, out restartInt); 
      }; 
     } 
    } 


    public class Element 
    { 
     public string Name { get; set; } 
     public string Symbol { get; set; } 
     public int AtomicNumber { get; set; } 

     public Element(string name, string symbol, int atomicNumber) 
     { 
      Name = name; 
      Symbol = symbol; 
      AtomicNumber = atomicNumber; 
     } 
    } 
} 
+0

これはうまく見えます。もうクラスの情報は知っていますか?私はそれらを読んでみたい! – Bob

+2

その基本的な原則は、あなたはC#のコードを書くつもりなら - google "C#class"とあなたは多くの情報を見つけるでしょう! – Banners

+0

このコードを使用すると、「ローカル変数宣言またはスクリプトコード内にのみ、コンテキストキーワード "var"が表示される可能性があるvarのエラーが表示されます。どこに移動する必要がありますか?おそらくパブリッククラスの括弧の中にありますか? – Bob

関連する問題