2013-05-02 2 views
0

Приложение для моего ролика в кости содержит 7 текстовых полей (три пары «Количество кубиков» и «Тип кости» и бонусный) и кнопку. Я предполагал, что каждая пара текстовых полей считывается отдельно, и если она не содержит допустимых номеров («судьба» и «%» читаются как числа для причин приложения), она игнорирует ее.приложение перестает отвечать без видимых причин

проблема заключается в том, что когда я не вводим допустимые числа в одном из «нет». текстового окна «кубик» приложение перестает отвечать на запросы и в конечном итоге возвращается на страницу загрузки.

Обратите внимание, что я уже тестировал каждый метод отдельно.

вот код:

namespace DiceRoller 
{ 
public sealed partial class MainPage : DiceRoller.Common.LayoutAwarePage 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    Random r = new Random(); 

    //regular, untouched basic page code here 

    private void btnRoll1_Click(object sender, RoutedEventArgs e) 
    { 
     //the problem is with the number boxes. 
     List<int>[] results = new List<int>[3]; 
     if (!(ReadInput(textBoxNumber1.Text) == 0 || ReadInput(textBoxType1.Text) == 0)) 
     { 
      results[0] = Roll(ReadInput(textBoxType1.Text), ReadInput(textBoxNumber1.Text)); 
     } 
     if (!(ReadInput(textBoxNumber2.Text) == 0 || ReadInput(textBoxType2.Text) == 0)) 
     { 
      results[1] = Roll(ReadInput(textBoxType2.Text), ReadInput(textBoxNumber2.Text)); 
     } 
     if (!(ReadInput(textBoxNumber3.Text) == 0 || ReadInput(textBoxType3.Text) == 0)) 
     { 
      results[2] = Roll(ReadInput(textBoxType3.Text), ReadInput(textBoxNumber3.Text)); 
     } 
     textBlockOutput1.Text = "Results:" + String.Join(", ",results[0]) + ", " + String.Join(", ", results[1]) + ", " + String.Join(", ", results[2]) + System.Environment.NewLine + "Total:" + ((results[0].Sum() + results[1].Sum() + results[2].Sum() + ReadInput(textBoxBonus.Text)).ToString()); 
    } 

    //METHODS 

    private int ReadInput(string input) //tested 
    { 
     int returnValue = 0; 
     if (int.TryParse(input, out returnValue)) ; //the 'out' will make sure that the number has passed 
     else if (input == "%") returnValue = 100; 
     else if (input.ToLower() == "fate") returnValue = 6; 
     else if (input == "") ; 
     else textBlockOutput1.Text = "Error: All text boxes should contain a number,  the strings '%', 'Fate'(not case sensitive) or to be blank"; 
     return returnValue; 
    } 

    private int Roll(int diceType) //tested 
    { 
     return r.Next(diceType - 1) + 1; 
    } 

    private List<int> Roll(int diceType, int diceNumber)//tested 
    { 
     List<int> results = new List<int>(); 
     for (int i = 1; i <= diceNumber; i++) results.Add(Roll(diceType));//if one of the no. textboxes is read as '0', this couln't operate 
     return results; 
    } 
} 

}

-Спасибо заранее для хелперов

редактировать: я смотрел на него с отладчиком, как сообщил в комментарии (спасибо) и ошибка «Значение не может быть нулевым». но какое значение? он не дает никаких подсказок. еще раз спасибо.

+3

Запустили ли вы его под отладчиком? Если нет, я предлагаю вам начать там. –

+3

@MatthewWatson - Ты избил меня, это звучит как работа для мистера Эффтена и миссис ЭФФЭЛЕВЕН – Sayse

+0

Г-н Эффтен и миссис ЭФФЭлевен, мне это нравится. Эти два будут его bffs в каждой ситуации. – Zadam

ответ

1

Вы сделали массив списков

List<int>[] results = new List<int>[3];

, что вы действительно хотели, было List<int>() results = new List<int>();

затем добавить значения к этому с results.Add(Roll());

Вы будете иметь больше отладки для сделайте, чтобы убедиться, что есть 3 значения для вашего окончательного текста.

Edit 2 Это поддерживает теорию

enter image description here

Edit ..

Просто понял, у вас есть 2 способа ролл, Вы должны инициализировать, как sucn перед установкой их

for(int i = 0; i < 3; i++) 
{ 
results[i] = new List<int>(); 
} 
+0

Вы совершили ошибку: вы написали «Список () results = new Список ();» где он должен был быть: «Список результаты = новый Список ();». Спасибо за твой ответ – user1461837

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