2017-02-17 19 views
0

Итак, для класса я должен сделать небольшой калькулятор BMI на C#, и у меня возникли проблемы.Застрял с получением пользовательского ввода, а затем превратил его в значение Int

У меня есть 2 текстовых поля, weightTxt для веса и heightTxt для высоты, но я не могу получить значение, которое пользователь вводит во что-то, что я могу использовать для инструкции If-else.

Это то, что я сделал, чтобы преобразовать строку в целое:

int weight = Int32.Parse(weightTxt.Text); 
int height = Int32.Parse(heightTxt.Text); 

На мой взгляд, я думаю, что это должно превратить любой текст в каждом окне в значение INT, нет?

Кроме того, сторона вопроса, в операторе If, почему не могу я сделать что-то подобное с Int

if (weight >= 300 || weight <= 10) 
{ 
    MessageBox.Show("Input not acceptable"); 
} 

Большое спасибо большое, да, я очень нуб, пожалуйста, помогите мне :)

Edit: Это то, что весь мой .cs выглядит

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

namespace WindowsFormsApplication2 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void label1_Click(object sender, EventArgs e) 
    { 

    } 

    private void label2_Click(object sender, EventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 


     int weight = Int32.TryParse(weightTxt.Text); 
     int height = Int32.TryParse(heightTxt.Text); 

     if (weight >= 300) 
     { 
      MessageBox.Show("Input not acceptable"); 
     } 
     else 
     { 
      //do nothing? 
     } 

    } 
} 

}

+1

Ваш код выглядит отлично. Возможно, он вызывается до того, как пользователь вводит их вход. –

+1

Вы получаете сообщение об ошибке при анализе weightTxt и heightTxt? –

+0

Когда этот код выполняется? На кнопке нажмите или что-то еще? –

ответ

1

Вот как это можно сделать, используя полную проверку.

class Form1 : Form 
{ 
    public void OnButton1_Click(object sender, EventArgs e) 
    { 
     CalculateAndDisplayBMI(); 
    } 

    private void CalculateAndDisplayBMI() 
    { 
     int weight = 0; 
     int height = 0; 

     if(!TryGetWeight(out weight)) 
     { 
      MessageBox.Show("Invalid value for weight.") 
      return; 
     } 

     if (!TryGetHeight(out height)) 
     { 
      MessageBox.Show("Invalid value for height.") 
      return; 
     } 

     double bmi = CalculateBmi(weight, height); 
     bmiTxt.Text = $"{bmi}"; 
    } 

    private bool TryGetWeight(out int weight) 
    { 
     if (!int.TryParse(weightTxt.Text, out weight)) 
      return false; 

     if (weight <= 10 || weight >= 300) // kgs 
      return false; 
    } 

    private bool TryGetHeight(out int height) 
    { 
     if (!int.TryParse(heightTxt.Text, out height)) 
      return false; 

     if (height <= 100 || height >= 250) // cms 
      return false; 
    } 

    private double CalculateBmi(int height, int weight) 
    { 
     double heightInMeters = height/100d; 
     return weight/(heightInMeters * heightInMeters); 
    } 
} 
0

разбор правильно !:

int weight = Int32.Parse(weightTxt.Text); 
int height = Int32.Parse(heightTxt.Text); 

Вы можете сделать что-то вроде этого:

if (weight >= 300 || weight <= 10) 
{ 
    MessageBox.Show("Input not acceptable"); 
} 

если переменная weight не объявлена ​​как локальная переменная в другом методе! Например:

void method1() 
{ 
    int weight = Int32.Parse(weightTxt.Text); 
    int height = Int32.Parse(heightTxt.Text); 
} 

вы не сможете использовать его в method2, потому что не существует в этой области:

void method2() 
{ 
    if (weight >= 300 || weight <= 10) 
    { 
     MessageBox.Show("Input not acceptable"); 
    } 
} 

Решение этой проблемы было бы объявить переменную на уровне класса !

class Form1 : Form 
{ 

    int weight; 
    int height; 

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

void method1() 
    { 
     weight = Int32.Parse(weightTxt.Text); 
     height = Int32.Parse(heightTxt.Text); 
    } 

    void method2() 
    { 
     if (weight >= 300 || weight <= 10) 
     { 
      MessageBox.Show("Input not acceptable"); 
     } 
    } 
0

Единственная ошибка, кажется, использование TryParse. Пожалуйста, найдите подпись метода:

int weight; 
Int32.TryParse(weightTxt.Text,out weight); 
int height; 
Int32.TryParse(heightTxt.Text,out height);