2016-09-15 2 views
6

У меня есть проект, где я должен принять во входе names, weights и heights и поместить их в массивы и отображать их в TextBox как этотОтображение несколько Массивов

name = "..." 
weight = "..." 
height= "..." 

я был в состоянии заполнить мои массивы, но я не понимаю, как это выводит его, как в примере выше. В настоящее время мой вывод - это все имена, ТОГДА все веса тогда все высоты. Может ли кто-нибудь объяснить, как я смогу показать его как пример? Код, который я до сих пор

private void ShowButton_Click(object sender, EventArgs e) 
{   
    txtShow.Text += string.Join(System.Environment.NewLine, nameArray); 
    txtShow.Text += string.Join(System.Environment.NewLine, weightArray); 
    txtShow.Text += string.Join(System.Environment.NewLine, heightArray);  
} 
private void AddButton_Click(object sender, EventArgs e) 
{ 
    if (this.index < 10) 
    { 
     nameArray[this.index] = nameBox.Text; 
     weightArray[this.index] = double.Parse(weightBox.Text); 
     heightArray[this.index] = double.Parse(heightBox.Text); 
     this.index++; 
    } 
} 

массив может хранить до 10 значений, и я должен использовать массивы, а не списки.

+1

Ну, вы можете изменить '' nameArray' к String.Concat (NameArray) 'и т.д .. . – Fabjan

+0

Благодарим вас за ответ! –

+1

Вы говорите о многомерных массивах, и хотя все приведенные ниже ответы правильны, это, вероятно, самый необходимый вам ответ. https://www.dotnetperls.com/multidimensional-array или здесь https://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx –

ответ

5

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

PS - на первый ответ я попытался сохранить код своего предложения как можно ближе к вашему, чтобы ответить на ваш вопрос, не изменяя свой код. Другой комментатор предположил, что постоянное обновление textbox.Text приведет к мигающим проблемам. Если это произойдет с вами, я бы предложил использовать временную строку, поскольку я редактировал свой текст.

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

EDIT Вы попросили способ обнаружить пустой. Основываясь на моем понимании кода и сохранить его простым, попробуйте:

private void AddButton_Click(object sender, EventArgs e) 
{ 
    if (this.index < 10) 
    { 
     if(nameBox.Text.Length==0||weightBox.Text.Length==0||heightBox.Text.Length==0){ 
      MessageBox.Show("You must enter a name, weight, and height!"); 
     }else{ 
      nameArray[this.index] = nameBox.Text; 
      weightArray[this.index] = double.Parse(weightBox.Text); 
      heightArray[this.index] = double.Parse(heightBox.Text); 

      this.index++; 
      nameBox.Text = ""; 
      weightBox.Text = ""; 
      heightBox.Text = ""; 
     } 
    } 
} 
private void ShowButton_Click(object sender, EventArgs e) 
{  string myString = ""; 
     for(int i=0;i<nameArray.Length;i++) 
     { 
       myString+= "Name: "+nameArray[i]+", "; 
       myString += "Weight: "+weightArray[i]+", "; 
       myString += "Height: "+heightArray[i]+"\n"); 
     } 
     txtShow.Text = myString; 

} 

Примечание Textboxes есть методы проверки, которые будут выполнять работу моего IF/THEN заявление в моем пересмотренном редактировать найти стеклотару. Если вы считаете, что профессор ищет форму (контроль), а не кодовое слово IF/THEN, дайте мне знать, и я помогу с этим.

Okay - Вы упомянули о необходимости сортировки. Для этого нам нужно использовать способ группировки входных данных. Мы могли бы использовать словарь или класс. Давайте перейдем к классу:

Взять все это вместе: Посмотрите на это потенциальное решение - если вы считаете, что это слишком сложно для вашей домашней работы, мы можем попытаться упростить. Дайте мне знать:

public class Person{ 
    public string Name {get;set;} 
    public double Height {get;set;} 
    public double Weight {get; set;} 
    public string Print(){ 
     return "Name: "+Name+", Height: "+Height.ToString()+", Weight: "+Weight.ToString()+"\r\n"; 
    } 
} 
Person[] People = new Person[10]; 
int thisIndex = 0; 
private void AddButton_Click(object sender, EventArgs e) 
    { 
     if (this.index < 10) 
    { 
     if(nameBox.Text.Length==0||weightBox.Text.Length==0||heightBox.Text.Length==0) 
     { 
      MessageBox.Show("You must enter a name, weight, and height!"); 
     }else{ 
      Person p = new Person(); 
      p.Name = nameBox.Text; 
      p.Weight = double.Parse(weightBox.Text); 
      p.Height = double.Parse(heightBox.Text); 
      People[thisIndex] = p; 
      thisIndex++; 
      nameBox.Text = ""; 
      weightBox.Text = ""; 
      heightBox.Text = ""; 
     } 
    } 
} 
private void ShowButton_Click(object sender, EventArgs e) 
{  
     People = People.OrderBy(p=>p.Name).ToArray(); 
     string myString = ""; 
     for(int i=0;i<10;i++) 
     { 
      if(People[I]!=null){ 
       myString+= People[I].Print(); 
      } 
     } 
     txtShow.Text = myString; 

} 
+0

Спасибо! Это сделало заказ верным, но новая линия не работает :(Редактировать: Nevermind \ r \ n работал! Спасибо! –

+1

Рад помочь! Приветствия. –

+0

Случайно вы знаете, как заставить его игнорировать пустые или нулевые значения? Я знаю, что существует метод isEmptyOrNull(), но я не знаю, как его включить здесь. –

3

Вы должны создать класс для этой цели.Класс позволяет создавать свои собственные пользовательские типы путем объединения переменных трех типов (строка, двойных и двойных):

public class Person 
{ 
    public string Name { get; set; } 
    public double Weight { get; set; } 
    public double Height { get; set; } 

    public override string ToString() 
    { 
     return Name + " " + Weight + " " + Height; 
    } 
} 

Тогда:

Person[] persons = new Person[10]; 
private void AddButton_Click(object sender, EventArgs e) 
{ 
    persons[index] = new Person 
     { 
      Name = nameBox.Text, 
      Weight = double.Parse(weightBox.Text), 
      Height = double.Parse(heightBox.Text) 
     }; 
     index++; 
} 

И, наконец (смотреть на ShowButton-х код, который в настоящее время является одной строки):

txtShow.Text += string.Join(System.Environment.NewLine, persons.AsEnumerable()); 
+0

Благодарим вас за ответ, но не этот список массивов? Когда я смогу использовать арраистов, я попробую это :). –

+0

@AnnieLowry Я использовал List вместо массива, потому что он более общий. Если вы все еще хотите использовать массив, не следует слишком сильно изменить определение списка на массив. –

+0

Хорошо, спасибо! Я тоже попробую это сделать. –

3

Linq решение:

private void ShowButton_Click(object sender, EventArgs e) { 
    int n = Math.Min(Math.Min(nameArray.Length, weightArray.Length), heightArray.Length)); 

    txtShow.Text = String.Join(Environment.NewLine, Enumerable 
    .Range(0, n) 
    .Select(i => string.Format("Name: {0}, Weight: {1}, Height: {2}", 
     nameArray[i], weightArray[i], heightArray[i]))); 
} 

Старайтесь избегать txtShow.Text += фрагментов, особенно в циклах (каждый Text средство изменения перерисовки и, таким образом, мигающего)

+0

Я пробовал это, и он тоже работал. Спасибо! –

+0

@ Энни Лоури: добро пожаловать! –

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