2016-12-06 25 views
-2
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace switchStatementExercise 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      String response; 

      Console.WriteLine("Please Vote for your president out of the 7 following, Joseph Mason, James Long, Ben Harding, Georgia Mason, Keith Webb, Mark Grimley, Max Gridley"); 
      response = Console.ReadLine(); 

      string fullNameJoe = response; 
      var names = fullNameJoe.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); 
      string firstName = names[0]; 
      string lastName = names[1]; 
      Console.WriteLine(lastName); 
      if (response.Equals(fullNameJoe) || response.Equals(firstName) || response.Equals(lastName)) 
      { 
       Console.WriteLine("You have voted for " + fullNameJoe); 
       Console.WriteLine(fullNameJoe); 

      } 
      else if (fullNameJoe.Length > 1 && lastName == null) 
      { 

       Console.WriteLine("You need a last name"); 
      } 
      else 
      { 
       Console.WriteLine("Please enter a first name and last name"); 
      } 

     } 
    } 
} 

だから私は、姓が空であるかどうかをチェックすることはすべてのユーザーが姓を入力することでしたが、このエラーが発生しています。スプリットメソッドが空であるかどうかを確認する

未処理の例外:System.IndexOutOfRangeException:インデックスが配列の境界外にありました。 \ Users \ユーザージョー\デスクトップ\ cSharpWeek1 \ switchStatementExercise \ switchStatementExercise \ Program.csを::21行

答えに任意のヘルプやリダイレクトがだろうCでswitchStatementExercise.Program.Main(文字列[] args)をで すばらしいです!

+0

なぜ 'fullNameJoe.Split(新しい[]を{ ''}チェック名に直接行くことができます; Gridley' –

+0

私はこれを試してもまだ動作しません): –

+0

これは、あなたが入力しているものに従って動作します。 'fullNameJoe.Split("、; -/"ToCharArray ) ' –

答えて

0

指数は、あなたがSplitnames[1](ほとんどの場合)を取得していない、あなたはそこに入力されたものは何でも配列の境界

手段、外にいました。したがって、「alex;」と入力した場合は、 - のことを忘れます。 ";"

あなたは別のノート、なぜに

if (names.Length < 2) 
{ 
    Console.WriteLine("You need first and last name"); 
    return; 
} 

を確認することができますか?それは "alex; morgan"と入力することを期待します。通常は「alex morgan」と入力し、「」で分割します。あなたは、これはあまり意味がありません

if (response.Equals(fullNameJoe) || response.Equals(firstName) || response.Equals(lastName 

第二部では、文字

fullNameJoe.Split(" ,;-/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 

のいずれかによって分割を使用することができます。最初の条件は常に真です。 2番目と3番目の条件は真または偽になります。あなたはおそらく行う必要があると、[if (names.Length < 2)]

var presidents = "Joseph Mason, James Long, Ben Harding, Georgia Mason, Keith Webb, Mark Grimley, Max Gridley". 
    Split(",".ToCharArray()).Select(p => p.Trim()).ToArray() 

リストを作成し、条件数1(オプション)をチェックしています。 `マックスを書き込みます誰が` `と`ないfullNameJoe.Split(新しい[] {」「}。;それとも、

if (names.Contains(response.Trim(), StringComparer.OrdinalIgnoreCase)) 
{ 
    Console.WriteLine("yes"); 
} 
+0

私は同じエラーを与えています): –

+0

私のコードを空のスペースに戻しました " –

+0

@ J.mason私は同意しません、私はちょうどfiddled 'var fullNameJoe =" alex morgan "; var names = fullNameJoe.Split(new [] {''}、StringSplitOptions.RemoveEmptyEntries) ; Console.WriteLine(names [0]); \t Console.WriteLine(names [1]); ** ** charmのように動作します** –

関連する問題