2015-01-28 1 views
1
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 WindowsFormsApplication1 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 


    private void button1_Click(object sender, EventArgs e) 
    { 
     var numbers = textBox1.Text.Split(' '); 
     var min = numbers.Min(); 
     var max = numbers.Max(); 
     textBox2.Text = string.Format("min: {0} max: {1}", min, max); 
     { 

     } 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 
    }  
} 

возникают проблемы отображения правильное значение макс, когда пользователь вводит (1 2 3 4 5 6 7 8 9 10) Я я новичок в программировании, и я немного смущен тем, что нужно изменить для моего max {0}, чтобы получить десять, чтобы отобразить как 10, а не 9. Мне было интересно, может ли кто-нибудь помочьИмея проблемы с отображением правильное значение макс, когда пользователь вводит (1 2 3 4 5 6 7 8 9 10)

+0

'Split()' дает вам массив 'string'. Вы захотите преобразовать их в 'int', если хотите получить максимальное число, которое они ввели. Как вы его кодировали, он дает вам последнюю строку в алфавитном порядке, которая равна 9. –

+0

коса еще струны или символы, поэтому «10» - это «9», вам придется преобразовать их в массив чисел сначала – SuckerForMayhem

ответ

0
var numbers = textBox1.Text.Split(' ') 
.Select(int.Parse).ToArray(); 
var min = numbers.Min(); 
var max = numbers.Max(); 

Добавить второе текстовое поле в свою форму и добавить эту строку под все.

textbox2.Text = string.Format("min: {0} max: {1}", min, max); 
3

У вас есть массив строк , поэтому, когда вы используете Min и Max, значения будут сравниваться как строки.

Пока как цифры 10 > 9, как строки "10" < "9", потому что в качестве строк они будут сортироваться как "0", "1", "10", "2", "3", "4", "5", "6", "7", "8", "9".

Вы можете разделить строку, а затем преобразовать каждую строку в число:

int[] numbers = 
    textBox1.Text.Split(' ') 
    .Select(s => Int32.Parse(s)) 
    .ToArray(); 

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

0

Значения, которые вы извлекаете из var numbers = textBox1.Text.Split(' ');, будут массивом строк, а не чисел. Вам нужно будет проанализировать записи в вашем массиве numbers, чтобы превратить их из строк в числа. «Макс» строка в вашей последовательности, на самом деле, 9, а не 10., потому что 9 сортов выше 1.

string textBox1 = "1 2 3 4 5 6 7 8 9 10"; 
var numbersAsStrings = textBox1.Text.Split(' '); 

List<double> numbersAsDoubles = new List<double>(); 

foreach (var numberAsString in numbersAsStrings) 
{ 
    double numberAsDouble; 
    if (double.TryParse(numberAsString,out numberAsDouble)) 
    { 
     numbersAsDoubles.Add(numberAsDouble); 
    } 
} 

var min = numbersAsDoubles.Min(); 
var max = numbersAsDoubles.Max(); 
var outputMessage = string.Format("min: {0} max: {1}", min, max); 
textBox2.Text = outputMessage; 

Преимущество этого метода заключается в том, что он использует TryParse. Если вы используете только Parse и используете типы типов, которые не являются числом или пробелом, то будет выброшено System.FormatException. Вы можете увидеть это, если вы попытаетесь запустить этот код

string textBox1 = "1 2 3 4 5 6 7 8 9 10 A"; 
var numbers = textBox1.Split(' ').Select(int.Parse).ToArray(); 

Та же ошибка возникает, если ваш пользователь 10.1 потому что вы используете int.Parse вместо из double.Parse, но, возможно, это то, что вы хотите.

+0

Единственная проблема заключается в том, что пользователь вводит числа – user3577005

+0

. Все в порядке. Я сделал testBox1 переменной, но это не локальная переменная в вашем коде, это текстовый объект. Вы можете использовать его как таковой. – Brad

+0

@ user3577005 Я редактировал, чтобы соответствовать вашим объектам. – Brad

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