2013-10-31 283 views
0

我對使用C#非常陌生。我正在嘗試保存輸入控制檯的數據(如人名等文本),然後「讀取」到數組中。將文本數據保存到數組

我想數據保存到數組的名稱是:name2convert
可變收集數據(姓名被轉換)是:nameEntered

任何幫助是非常讚賞。我一直在做這個工作幾個小時,並且做了幾次搜索,但是我現在還沒有找到任何我能理解的解釋,因爲我對C#的理解有限。我幾個星期才試着學習這個東西 - 我非常非常綠。任何幫助表示讚賞。

注:字符串名稱是我的測試數組,所以我可以看到我知道如何從數組中讀回數據。我想將數據保存到names2Convert數組。

這是我的代碼:

using System; 

namespace a061___String_Manipulations___PigLatin 
{ 
///loop - ask for number of names equal to number asked 
/// read line, save to array, iterate one up until num equals value asked for 

class Program 
{ 
    //Arrays 

    String[] names = { "test01", "test02", "test03", "test04", "test05" }; //Test loop 

    String[] name2convert = new String[1]; 

    //Variables & Ints? 
    string title = ">>>-- Welcome to the Highly Enlightening World of Igp-ay Atinl-ay --<<< \n"; 
    string totalIs = "You said you want to convert a total of"; 
    string listCommands = "Is that correct? If so type (Y)es, (R)enter or (Q)uit";// general commands used 
    string addSuffix ="-ah!"; // Add to end of each name 
    string nameEntered = "";//name to be converted 

    int namesTotal = 0;// 

    //Main Method 
    public void Play() 
    { 
     Console.WriteLine(title); //announce program 

     askTotal(); //ask number of names 

     while (true) 
     { 
      Console.WriteLine(listCommands);//lists options 
      String command = Console.ReadLine().ToLower();//reads user command 

      if (command == "y") // if askTotal true save to array? how? 
      { 
       askName();//collects name entered 
       confirmName();//allows user to confirm spelling, etc.  

       //y save the array nameEntered name2convert 
       //name2convert.Add(nameEntered); 
       name2convert[0] = nameEntered; 

       //confirm name 
       for (int i = 0; i < name2convert.Length; i++) 
       { 
        Console.WriteLine("Name Aquired: " + name2convert[i]); 
       } 
      } 
      else if (command == "r") 
      { 
       askName();//asks name 
      } 
      else if (command == "q") 
      { 
       Console.WriteLine("Cheers!"); break; //end 
      } 
      else 
      { 
       Console.WriteLine("Sorry. Invalid Request");//try again 
      } 

      PrintList();//test array 
     } 
    } 

    //Helper Methods 
    public void PrintList()//iterates through, prints names stored in array 
    { 
     Console.WriteLine("Print List"); 
     for (int i = 0; i < names.Length; i++) 
     { 
      Console.WriteLine((i + 1) + ". " + names[i] + addSuffix); 
     } 
    } 

    //iterates through, prints names stored in array 
    public void askName() 
    { 
     Console.WriteLine("Enter Name: ");//Confirming 
     String nameEntered = Console.ReadLine().ToLower();// Capture name 

     Console.WriteLine("Name Captured: " + nameEntered);//confirming name caught 
    } 

    //iterates through, prints names stored in array 
    public void confirmName() 
    { 
     Console.WriteLine(listCommands);//Confirming 
     String command = Console.ReadLine().ToLower(); 
    } 

    //how many names to convert 
    public void askTotal() 
    { 
     Console.WriteLine("How many names would you like to convert?");//Ask for content 
     namesTotal = int.Parse(Console.ReadLine()); 

     Console.WriteLine(totalIs + " " + namesTotal);//Confirming 
    } 

    //Call Application 
    static void Main(string[] args) 
    { 
     Program StringManipulations = new Program(); 
     StringManipulations.Play(); //Call forth the Pig Latin... 

     Console.Read();// 
    } 
} 

}

+1

陣列具有定義的長度。使用清單或類似的。 – Fallenreaper

+0

我不明白你想在namesToConvert中搜索哪些數據?你能更清楚的是什麼問題? – Alexandre

回答

0

更改此:

//y save the array nameEntered name2convert 
name2convert.Add(nameEntered); 

要這樣:

name2convert[0] = nameEntered; 

編輯:

askName()功能變化:

String nameEntered = Console.ReadLine().ToLower();// Capture name 

要:

nameEntered = Console.ReadLine().ToLower();// Capture name 

您已經聲明爲類的屬性stringnameEntered

爲什麼你使用string然後String?它是相同的,因爲stringString(它實際上是C#中的System.String)的別名 - 但要保持一致!

正如你已經分配了這個數組的內存(它是固定大小 - 在你的情況下它是一個)。 因此,要訪問陣列中的第一個(也是唯一的)單元格,您應該使用name2convert[0] - 0是任何數組的第一個索引,並且通常位於C#(以及許多其他編程語言)中的任何其他結構/容器處。

另一種方法(如你在你的例子中嘗試)是用戶List<String>。 有關數組和列表的詳細信息,請參考這裏:

Array tutorial

List tutorial and examples

+0

謝謝Etaiso的建議,你非常友善,我非常感謝。我嘗試了你的解決方案,但我擔心我做錯了什麼。我已經修改了上面的代碼以顯示我如何修改它。 'name2convert [0] = nameEntered;對於(int i = 0; i Chezshire

+0

你把for循環放在哪裏?在數組賦值之後? 你確定'nameEntered'被更改了嗎? (從用戶獲得輸入)? 很難說因爲您的Main接收到影響程序流的用戶輸入,並且您沒有給我們提供該輸入。 – etaiso

+0

我相信,方法'askName'捕獲名爲'nameEntered',我試圖保存到names2convert數組。 – Chezshire

0

如果你想保存的每一個字,用戶輸入使用字符串E的名單。克

List<String> name2convert; 

然後

name2convert.Add(nameEntered); 

要經過列表

foreach (String word in name2convert) 
{ 
    Console.WriteLine(word); 
} 
+0

謝謝亞歷山大,我會嘗試/探索這個。感謝您的幫助/指導。其'非常感謝。 – Chezshire