2016-12-06 5 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"); 
      } 

     } 
    } 
} 

Итак, что я пытаюсь сделать, это проверить, является ли последнее имя пустым, это был всего лишь пользователь, чтобы ввести фамилию, но я получаю эту ошибку.Проверка наличия метода Split

Unhandled Exception: System.IndexOutOfRangeException: Индекс находился за пределами массива. в switchStatementExercise.Program.Main (String [] арг) в C: \ Users \ Joe \ Desktop \ cSharpWeek1 \ switchStatementExercise \ switchStatementExercise \ Program.cs: строка 21

Любая помощь или перенаправление в ответ будет Великий!

+0

Почему 'fullNameJoe.Split (новый [] { ';'}. ', А не' fullNameJoe.Split (новый [] {»«} 'Кто будет писать' Max ; Gridley' –

+0

Я пробовал это, и это все еще не работает): –

+0

Он работает только в соответствии с тем, что вы набираете. Вы можете разделить любые символы 'fullNameJoe.Split (",; -/") ToCharArray () ' –

ответ

0

Индекс находился вне границ массива

средства, что вы набрали там, вы не получили names[1] (скорее всего) после Split. Итак, если вы набрали «alex»; - забудь.

Вы можете проверить

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

На другой ноте, почему ";"? Он будет ожидать ввода «alex; morgan». Обычно мы печатаем «alex morgan» и разделяем «». Вы можете использовать разделение любой из символов

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

Во второй части

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

это не имеет особого смысла. Первое условие всегда будет истинным. Второе и третье условие будут истинными или ложными. То, что вы, вероятно, нужно сделать, это создать список

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

А затем проверьте состояние номер один (опционально) [if (names.Length < 2)]. Или вы можете перейти непосредственно к имени проверки

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

Все еще даю мне ту же ошибку): –

+0

Я поменял свой код на пустое пространство между« » –

+0

@ J.mason Я не согласен, Я просто исказил его var varNameJoe = alex morgan, var names = fullNameJoe.Split (new [] {''}, StringSplitOptions.RemoveEmptyEntries) ; Console.WriteLine (имена [0]); \t Console.WriteLine (имена [1]); '** работает как шарм ** –

Смежные вопросы