2017-02-09 2 views
4

Создайте графическое приложение IGPAY, которое позволяет пользователю вводить слово. Затем, когда пользователь нажимает кнопку, ваша программа будет генерировать и отображать латинский эквивалент этого слова. (Чтобы сделать это, вы удалите первую букву слова, затем добавьте это письмо в конец слова плюс буквы «ay». Например, рыба станет ishfay, и мяч станет allbay.) Убедитесь, что GUI привлекателен и все ярлыки, текстовые поля, кнопки и т. д. четко обозначены. Подсказка: сохраните слово в строке и подумайте об использовании метода подстроки. Также помните, что свойство Length для строки сообщит вам свою длину. Примеры приведены на страницах 79-80.Pig Латинский переводчик. C# Домашнее задание

Вот код, который я придумал. Я новичок в этом языке и немного разбираюсь в Python, но я просто не понимаю, почему это порождает ошибку «Исключение вне диапазона». Я пытаюсь сделать так, чтобы код принимал какое-либо слово и отображал его в латиноамериканском языке.

private void button1_Click(object sender, EventArgs e) 
{ 
     string word; 
     string first; 
     string rest; 
     string full; 
     word = textBox1.Text; 
     first = word.Substring(0); 
     rest = word.Substring(1, word.Length); 
     full = rest + first + "ay"; 
     label2.Text = full; 
} 
+2

Почему вы отметили C++? –

ответ

1
first = word.Substring(0, 1); 
rest = word.Substring(1, word.Length - 1); 

Поскольку метод Substring() равен нулю на основе word.Length находится за пределами строки. Изменение второго аргумента до word.Length - 1 должно избегать ошибки.

Кроме того, так как вам нужно только первый символ, первый вызов Substring() должен иметь второй аргумент 1.

Хорошо вы назвали это как домашнее задание и дали свой код попытку.

(под редакцией включить очень правильный комментарий Роба о .Substring(1))

+1

Настоящая проблема заключается в том, что мы пропускаем один символ, а затем берем буквы 'Length'. Это произойдет независимо от того, используют ли они индексы на основе нуля (хотя для 1-индексации подстрока (1) не имеет большого смысла). – Rob

3

Не знаю, почему вы получили downvote, хорошая работа объявляя это домашнее задание, и по крайней мере, обеспечивая некоторую работу, которую вы сделали. Кроме того, все здесь должны понимать, что вы хотите учиться.

Есть некоторые вещи, которые я бы рассмотрел, если бы я был вами. В дополнение к ответу Phylyp, который должен исправить ваше исключение, вы также должны обработать, если пользователь вводит менее двух символов, что также может вызвать исключение.

Ниже я покажу пример трех вещей, которые вы можете сделать. Не сказать, что это лучший способ, но это вариант.

  1. Проверьте введенную строку, чтобы убедиться, что она не менее двух символов, а если нет, то пригласите пользователя.

  2. Сократить количество строковых переменных и строк декларации с помощью одной строки.Format call.

    private void Button1_Click(object sender, EventArgs e) 
    { 
        const string suffix = "ay"; 
        string enteredString = textBox1.Text; 
    
        //Check the length to make sure it is at least 2 
        if(enteredString.Length < 2) 
        { 
         MessageBox.Show("Please enter at least 2 or more characters"); 
         return; 
        } 
    
        //We get here if 2 or more characters were entered. 
        //Lets go ahead an process our string 
        label2.Text = string.Format("{0}{1}{2}", 
         enteredString.Substring(1), 
         enteredString.Substring(0,1), 
         suffix); 
    } 
    

EDIT - я редактировал ответ выше того, что вы на самом деле хотите иметь, которая является первой подстроке только 1 и что даст вам все, что в строке после первой буквы. В основном, вы говорите, дайте мне строку, начинающуюся с позиции 1, или вторую букву. Затем вторая переменная говорит мне строку, начинающуюся с позиции 0, и только для длины 1 символа. Это, по сути, даст вам только первое письмо. Итак, это даст вам то, что вы хотите. Пара с проверкой, чтобы убедиться, что введено как минимум два символа, и у вас не должно быть никаких исключений.

Надеюсь, это поможет!

+0

Роб делает хорошую оценку ниже, мой ответ по-прежнему стоит, но вам нужно убедиться, что вы начинаете подстроки в нужном месте, чтобы получить желаемый результат и соответственно проверить или вычесть ваши длины. Я не считал это в своем ответе. –

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