Другие языки программирования и технологии
Программисты C#, помогите. задачка элементарная
У меня такая ситуация: В ListBox1 забивается массив из 12 элементов. мне нужно, чтобы по нажатию некой кнопки в ListBox2 высветился номер наибольшего элемента из ListBox1. Помогите пожалуйста
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 WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listBox1.Items.Add(1);
listBox1.Items.Add(5);
listBox1.Items.Add(3);
listBox1.Items.Add(14);
listBox1.Items.Add(32131);
listBox1.Items.Add(4321);
listBox1.Items.Add(12);
listBox1.Items.Add(312);
listBox1.Items.Add(4);
listBox1.Items.Add(312);
listBox1.Items.Add(11);
listBox1.Items.Add(1);
}
private void button1_Click(object sender, EventArgs e)
{
int max = Convert.ToInt32(listBox1.Items[1]);
for (int i = 0; i < 12; i++)
{
if(max < Convert.ToInt32(listBox1.Items))
{
max = Convert.ToInt32(listBox1.Items);
}
}
listBox2.Items.Add(max);
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listBox1.Items.Add(1);
listBox1.Items.Add(5);
listBox1.Items.Add(3);
listBox1.Items.Add(14);
listBox1.Items.Add(32131);
listBox1.Items.Add(4321);
listBox1.Items.Add(12);
listBox1.Items.Add(312);
listBox1.Items.Add(4);
listBox1.Items.Add(312);
listBox1.Items.Add(11);
listBox1.Items.Add(1);
}
private void button1_Click(object sender, EventArgs e)
{
int max = Convert.ToInt32(listBox1.Items[1]);
for (int i = 0; i < 12; i++)
{
if(max < Convert.ToInt32(listBox1.Items))
{
max = Convert.ToInt32(listBox1.Items);
}
}
listBox2.Items.Add(max);
}
}
}
Илья Новосёлов
вставил в программу, подогнал под свой код, но после запуска выдало вот это: "Не удалось привести тип объекта "ObjectCollection" к типу "System.IConvertible"."
посмотрите на этот код:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private readonly int[] _data;
public Form1()
{
InitializeComponent();
_data = GetRandomData(12);
}
private static int[] GetRandomData(int count)
{
var random = new Random(Environment.TickCount);
var result = new int[count];
for (var i = 0; i < count; i++)
result[ i ] = random.Next(-100, 100);
return result;
}
private static KeyValuePair< int, T >? GetMax< T >(T[] values)
where T : IComparable< T >
{
var count = values.Length;
if (count == 0)
return null;
var result = new KeyValuePair< int, T >(0, values[0]);
for (var i = 1; i < count; i++)
{
var value = values[ i ];
if (result.Value.CompareTo(value) < 0)
result = new KeyValuePair< int, T >(i, value);
}
return result;
}
private void Form1Load(object sender, EventArgs e)
{
listBox1.DataSource = _data;
}
private void Button1Click(object sender, EventArgs e)
{
listBox2.Items.Clear();
var max = GetMax(_data);
if (max.HasValue)
listBox2.Items.Add(max.Value.Key);
}
}
}
индексация, само собой, начинается с нуля.
вместо целых чисел можно использовать любые другие, либо строки: метод GetMax() обобщён.
заполнять листбокс руками не нужно.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private readonly int[] _data;
public Form1()
{
InitializeComponent();
_data = GetRandomData(12);
}
private static int[] GetRandomData(int count)
{
var random = new Random(Environment.TickCount);
var result = new int[count];
for (var i = 0; i < count; i++)
result[ i ] = random.Next(-100, 100);
return result;
}
private static KeyValuePair< int, T >? GetMax< T >(T[] values)
where T : IComparable< T >
{
var count = values.Length;
if (count == 0)
return null;
var result = new KeyValuePair< int, T >(0, values[0]);
for (var i = 1; i < count; i++)
{
var value = values[ i ];
if (result.Value.CompareTo(value) < 0)
result = new KeyValuePair< int, T >(i, value);
}
return result;
}
private void Form1Load(object sender, EventArgs e)
{
listBox1.DataSource = _data;
}
private void Button1Click(object sender, EventArgs e)
{
listBox2.Items.Clear();
var max = GetMax(_data);
if (max.HasValue)
listBox2.Items.Add(max.Value.Key);
}
}
}
индексация, само собой, начинается с нуля.
вместо целых чисел можно использовать любые другие, либо строки: метод GetMax() обобщён.
заполнять листбокс руками не нужно.
Илья Новосёлов
Спасибо конечно за такой подробный ответ, но в таком случае мне нужно просто переделать пол программы. да и я метода GetMax() не знаю
в функции клика кнопки
private void button1_Click(object sender, EventArgs e)
{
int max = 0;
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (Convert.ToInt32(listBox1.Items.ToString()) > max)
{
max = Convert.ToInt32(listBox1.Items.ToString());
}
}
listBox2.Items.Add(max);
}
примерно так)
private void button1_Click(object sender, EventArgs e)
{
int max = 0;
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (Convert.ToInt32(listBox1.Items.ToString()) > max)
{
max = Convert.ToInt32(listBox1.Items.ToString());
}
}
listBox2.Items.Add(max);
}
примерно так)
Олег Стародубов
А если все значения меньше 0, то макс будет равен 0 :)) а его то нет
Илья Новосёлов
Не, там не будет меньше нуля, у меня массив уже забивается в первый листбокс, нужно тупо по нажатию кнопки вывести номер наибольшего элемента.
я вставил ваш код, подогнал под свою прогу, но что-то не так, пишет:" Не удалось привести тип объекта "ObjectCollection" к типу "System.IConvertible"."
я вставил ваш код, подогнал под свою прогу, но что-то не так, пишет:" Не удалось привести тип объекта "ObjectCollection" к типу "System.IConvertible"."
Похожие вопросы
- В каких unix системах надо уметь работать на уровне ПОЛЬЗОВАТЕЛЯ программисту c++ ?
- Я зная C++ (уровень - днище) написал полноценную программу на C# за 7 дней. А программисты C# могут так же на C++?
- C# Помогите решить задачку.
- ВОт хочу программистом стать! помогите с каких сред программирования лучше начать! с перла или паскаля, или сразу с c++?
- Программисты C++, как это расшифровывается?
- C++ ( решите задачку )
- Программисты с++ помогите за 20 минут! Прошу вас!
- сколько зарабатывает программист C++?
- за какое время можно стать профессиональным программистом c++?
- C++ помогите начинающему ?