Пустой вопрос - PullRequest
       34

Пустой вопрос

2 голосов
/ 21 августа 2011

Итак, в основном я пытаюсь создать приложение для Windows Form, чтобы рассчитать среднее значение для 4 тестовых оценок.Однако в некоторых классах у меня может быть только 3 теста.Без значения во всех четырех тестовых текстовых полях программа не будет вычислять среднее значение.Я пытаюсь найти способ кодирования, если в четвертом текстовом поле ничего нет, просто проигнорируйте его и вычислите остальные 3. Мой код приведен ниже:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GradeCalc
{
    public partial class Grades : Form
    {
        public Grades()
        {
            InitializeComponent();
        }

        private void Submit_Click(object sender, EventArgs e)
        {
            double test1;
            double test2;
            double test3;
            double test4;
            double average4;
            double average3;

            //Here, I'm trying to achieve:
            //if (t4 is empty)
            //{find the average of the first 3 textboxes}

            if (t4.Text == null)
            {
                test1 = double.Parse(t1.Text);
                test2 = double.Parse(t2.Text);
                test3 = double.Parse(t3.Text);
                average3 = ((test1 + test2 + test3) / 3);
                tavg.Text = average3.ToString("00.00");
            }
                //Here, I'm trying to achieve:
                //if (t4 is not empty)
                //{ calculate the average of all 4 textboxes}

            else
                if (t4.Text != null)
                {
                    test1 = double.Parse(t1.Text);
                    test2 = double.Parse(t2.Text);
                    test3 = double.Parse(t3.Text);
                    test4 = double.Parse(t4.Text);
                    average4 = ((test1 + test2 + test3 + test4) / 4);
                    tavg.Text = average4.ToString("00.00");
                }
        }
    }
}

У меня не многоопыта работы с C #, поэтому любая помощь будет оценена спасибо.

Ответы [ 5 ]

3 голосов
/ 21 августа 2011

Попробуйте String.IsNullOrEmpty (t4.Text)

2 голосов
/ 21 августа 2011

попробуйте это:

List<double> MyValues = new List<double>;

double T;

if ( double.TryParse ( t1.Text, out T) )
     MyValues.Add (T);

if ( double.TryParse ( t2.Text, out T) )
     MyValues.Add (T);

if ( double.TryParse ( t3.Text, out T) )
     MyValues.Add (T);

if ( double.TryParse ( t4.Text, out T) )
     MyValues.Add (T);

if ( MyValues.Count > 0 )
     tavg.Text = MyValues.Average ().ToString ("00.00");

приведенный выше код является надежным ... если какой-либо из текстов (t1 - t4) не является допустимым числом, оно пропускается ... среднее значение рассчитывается для правильных значений (1,2, 3 или 4) только ... и он учитывает случай, когда действительное значение не было введено ...

Вы можете легко изменить его так, чтобы потребовалось ввести не менее 3 действительных чисел при изменениинапример, от if до if ( MyValues.Count > 3 ).

0 голосов
/ 21 августа 2011

См. Другие ответы, которые говорят о TryParse или о содержании текстового поля. Это просто аннотация к ним.

FWIW, у меня есть вспомогательные функции для облегчения жизни, например:

double? AsDouble (string str) {
  double value;
  if (double.TryParse(str, out value))
    return value;
  } else {
    return null;
  }
}

Тогда это так же просто, как:

double val = AsDouble(txt.Text) ?? 0;

(где 0 - номер по умолчанию.)

Удачного кодирования.

0 голосов
/ 21 августа 2011

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

IEnumerable<Double> ParseValues(IEnumerable<TextBox> textBoxes) {
  foreach (var textBox in textBoxes) {
    Double value;
    if (Double.TryParse(textBox.Text, out value))
      yield return value;
  }
}

Эта функция будет принимать входную последовательность объектов TextBox и создавать выходную последовательность значений Double, пропуская все текстовые поля с недопустимыми значениями.

Затем вы можете использовать эту функцию для вычисления среднего значения:

var values = ParseValues(new[] { t1, t2, t3, t4 });
if (values.Any()) {
  var average = values.Average();
  tavg.Text = average.ToString("00.00");
}

Этот код будет вычислять среднее значение, если какое-либо или все текстовые поля содержат допустимые значения.

0 голосов
/ 21 августа 2011

Содержание четвертого текстового поля, вероятно, не пустое, а просто пустая строка. Вы можете использовать String.IsNullOrEmpty () вместо сравнения с нулем, чтобы охватить все углы. Но что, если кто-то вставит пространство или что-то в этом роде? Возможно, вы захотите также убрать пробелы.

Полная альтернатива - использовать метод TryParse, а не Parse, а затем использовать логическое значение возвращаемого успеха, чтобы решить, сколько результатов вы получите. TryParse работает так:

if (Double.TryParse(t4.Text, out test4))
{
   // this works
}
else
{
   // this did not
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...