|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
list index out of bounds (0)
Здравствуйте!
ошибка list index out of bounds (0) подскажите в чем ошибка? Код:
procedure TForm2.Button5Click(Sender: TObject); begin for i := 0 to Form2.ListBox1.Count-1 do if (Form2.ListBox1.Items[i] = 'Лиття під тиском')then if (Form2.ListBox1.Items[i] = 'Виконати лиття') then begin a1:=50000; {вартість станка} a2:= 8; {кількість годин на добу} a3:= 250; {Робочих днів на рік} a4:= 1.15; {витратин на обслуговування} a5:= 5; {термін окупності} a6:= 1.05; {витрати на інструмент} a7:=0.75; {потужність станка} a8:= 2.13; {тариф за електроенегрію} a9:= 500; {зарплата робітника за 1 зміну} a10:= 2; {ваговий коефіціент(податкиі зарплата)} a11:= 2; {ваговий коефіціент (статистичнйи показник)} a12:= 4; {ваговий коефіціент (статистичний показник)} a13:= 0.4; {час роботи станка)} a:=((((a1*a6*a4)/(a2*a3*a5))+(a7*a8)+((a9*a10)/a2)+((a9*a10)/2*a2)+((a9*a10)/4*a2))*(1+(a14/100)))/a15; end; Спасибо! Последний раз редактировалось Admin, 06.10.2019 в 17:07. |
#2
|
||||
|
||||
В приведенном коде ошибку "list index out of bounds (0)" ничего не вызывает. А сама ошибка говорит о том, что индекс списка к которому идет обращение лежит в не границ. Другими словами, обращение идет к несуществующему индексу списка.
А вот здесь у меня вопрос. Код:
if (Form2.ListBox1.Items[i] = 'Лиття під тиском')then if (Form2.ListBox1.Items[i] = 'Виконати лиття') then P.S.: заверните свой код в тег, или же получите предупреждение. Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
#3
|
|||
|
|||
да, но ошибка появляется при нажатии на эту кнопку.
по поводу этих 2-х строчек, мне необходимо чтобы проверялось 2 условия эсли в списку есть первое слово и второе слово тогда выполняется формула. Последний раз редактировалось ____jarik____, 06.10.2019 в 12:39. |
#4
|
|||
|
|||
вот полный текст программы, но она еще недописанная до конца.
Код:
unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm2 = class(TForm) ListBox1: TListBox; Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Button1: TButton; Button2: TButton; Edit3: TEdit; Button3: TButton; Edit4: TEdit; Button4: TButton; Button5: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; a,b:Double; i:integer; a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15:Double; implementation {$R *.dfm} uses Unit5; procedure TForm2.Button1Click(Sender: TObject); begin if (Edit1.Text = 'Лиття під тиском') or (Edit1.Text = 'Віброабразивна') or (Edit1.Text = 'Слюсарна') or (Edit1.Text = 'Фрезерна') or (Edit1.Text = 'Свердлильна') or (Edit1.Text = 'Хімічне окислення') or (Edit1.Text = 'Маркування') or (Edit1.Text = 'Контроль') then ListBox1.Items.Add(Edit1.Text) else ShowMessage('Не правильна назва операції'); Edit1.Clear end; procedure TForm2.Button2Click(Sender: TObject); begin if (Edit2.Text = 'Виконати лиття') or (Edit2.Text = 'Виконати обробку заготовок') or (Edit2.Text = 'Встановити, закріпити, зняти') or (Edit2.Text = 'Запилити і розчистити місце роз’єму') or (Edit2.Text = 'Фрезерувати пов.21, 22') or (Edit2.Text = 'Зняти задирки') or (Edit2.Text = 'Фрезерувати пов.6, 3,16 Попередньо ') or (Edit2.Text = 'Фрезерувати пов.2, 3, 4, 10, 11, 19 начисто') or (Edit2.Text = 'Фрезерувати пов.23') or (Edit2.Text = 'Свердлити отв. 12 під різьбу М3-6Н') or (Edit2.Text = 'Свердлити отв.5, 8 під різьбу М2-6Н') or (Edit2.Text = 'Перевстановити') or (Edit2.Text = 'Свердлити отв.20') or (Edit2.Text = 'Свердлити отв.9 під різьбу М2-6Н') or (Edit2.Text = 'Розточити отв.7') or (Edit2.Text = 'Розточити отв.6') or (Edit2.Text = 'Розточити отв.16') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 2 отв. Поз.9 ') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 4 отв. Поз.5') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 3 отв. Поз.8') or (Edit2.Text = 'Змінити інструмент') or (Edit2.Text = 'Нарізати різьбу М3-6Н в 1 отв. Поз.12') or (Edit2.Text = 'Нанести хімічне покриття') or (Edit2.Text = 'Маркувати умовний порядковий номер') or (Edit2.Text = 'Контролювати паралельність поверхонь') then ListBox1.Items.Add(Edit2.Text) else ShowMessage('Не правильна назва переходу'); Edit2.Clear end; procedure TForm2.Button3Click(Sender: TObject); begin a14:=StrToInt(Edit3.Text); Edit3.Clear end; procedure TForm2.Button4Click(Sender: TObject); begin a15:=StrToInt(Edit4.Text); Edit4.Clear end; procedure TForm2.Button5Click(Sender: TObject); begin for i:=0 to ListBox1.Count-1 do if (Form2.ListBox1.Items[i] = 'Лиття під тиском') and (Form2.ListBox1.Items[i] = 'Виконати лиття') then begin a1:=50000; {вартість станка} a2:= 8; {кількість годин на добу} a3:= 250; {Робочих днів на рік} a4:= 1.15; {витратин на обслуговування} a5:= 5; {термін окупності} a6:= 1.05; {витрати на інструмент} a7:=0.75; {потужність станка} a8:= 2.13; {тариф за електроенегрію} a9:= 500; {зарплата робітника за 1 зміну} a10:= 2; {ваговий коефіціент(податкиі зарплата)} a11:= 2; {ваговий коефіціент (статистичнйи показник)} a12:= 4; {ваговий коефіціент (статистичний показник)} a13:= 0.4; {час роботи станка)} a:=((((a1*a6*a4)/(a2*a3*a5))+(a7*a8)+((a9*a10)/a2)+((a9*a10)/2*a2)+((a9*a10)/4*a2))*(1+(a14/100)))/a15; end; if (Form2.ListBox1.Items[i] = 'Віброабразивна')then if Form2.ListBox1.Items[i] = 'Виконати обробку заготовок' then begin a1:=50000; {вартість станка} a2:= 8; {кількість годин на добу} a3:= 250; {Робочих днів на рік} a4:= 1.15; {витратин на обслуговування} a5:= 5; {термін окупності} a6:= 1.05; {витрати на інструмент} a7:=0.75; {потужність станка} a8:= 2.13; {тариф за електроенегрію} a9:= 500; {зарплата робітника за 1 зміну} a10:= 2; {ваговий коефіціент(податкиі зарплата)} a11:= 2; {ваговий коефіціент (статистичнйи показник)} a12:= 4; {ваговий коефіціент (статистичний показник)} a13:= 0.4; {час роботи станка)} a:=((((a1*a6*a4)/(a2*a3*a5))+(a7*a8)+((a9*a10)/a2)+((a9*a10)/2*a2)+((a9*a10)/4*a2))*a14)/a15; end ; Form5.Label1.Caption:='a' ; Form5.Show end; end. Последний раз редактировалось Admin, 06.10.2019 в 17:08. |
#5
|
||||
|
||||
А вот это
Код:
if (Edit1.Text = 'Лиття під тиском') or (Edit1.Text = 'Віброабразивна') or (Edit1.Text = 'Слюсарна') or (Edit1.Text = 'Фрезерна') or (Edit1.Text = 'Свердлильна') or (Edit1.Text = 'Хімічне окислення') or (Edit1.Text = 'Маркування') or (Edit1.Text = 'Контроль') Код:
if (Edit2.Text = 'Виконати лиття') or (Edit2.Text = 'Виконати обробку заготовок') or (Edit2.Text = 'Встановити, закріпити, зняти') or (Edit2.Text = 'Запилити і розчистити місце роз’єму') or (Edit2.Text = 'Фрезерувати пов.21, 22') or (Edit2.Text = 'Зняти задирки') or (Edit2.Text = 'Фрезерувати пов.6, 3,16 Попередньо ') or (Edit2.Text = 'Фрезерувати пов.2, 3, 4, 10, 11, 19 начисто') or (Edit2.Text = 'Фрезерувати пов.23') or (Edit2.Text = 'Свердлити отв. 12 під різьбу М3-6Н') or (Edit2.Text = 'Свердлити отв.5, 8 під різьбу М2-6Н') or (Edit2.Text = 'Перевстановити') or (Edit2.Text = 'Свердлити отв.20') or (Edit2.Text = 'Свердлити отв.9 під різьбу М2-6Н') or (Edit2.Text = 'Розточити отв.7') or (Edit2.Text = 'Розточити отв.6') or (Edit2.Text = 'Розточити отв.16') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 2 отв. Поз.9 ') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 4 отв. Поз.5') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 3 отв. Поз.8') or (Edit2.Text = 'Змінити інструмент') or (Edit2.Text = 'Нарізати різьбу М3-6Н в 1 отв. Поз.12') or (Edit2.Text = 'Нанести хімічне покриття') or (Edit2.Text = 'Маркувати умовний порядковий номер') or (Edit2.Text = 'Контролювати паралельність поверхонь') Далее... Как это по Вашему должно сработать? Код:
for i:=0 to ListBox1.Count-1 do if (Form2.ListBox1.Items[i] = 'Лиття під тиском') and (Form2.ListBox1.Items[i] = 'Виконати лиття') then Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
Этот пользователь сказал Спасибо Kailon за это полезное сообщение: | ||
____jarik____ (06.10.2019)
|
#6
|
|||
|
|||
это моя первая программа, не знаком с " ComboBox'e ",
Задача следующая: у меня есть тех. процесс производства детали мне необходимо его ввести в программу, название операции и название перехода. и оценить стоимость каждого перехода по формуле. в некоторых операциях есть одинаковые названия переходов (например установка) , мне необходимо чтобы программа понимала что это относится к разным операциям и у этих переходов разная стоимость. Большое спасибо! |
#7
|
|||
|
|||
"ListBox это ведь список строк, а Вы хотите чтобы она, строка из списка, равнялась и "Лиття під тиском" и "Виконати лиття" одновременно. Это как?"
хотел задать условие чтобы в списке была строка "Лиття під тиском" и строка "Виконати лиття". не одна и также строка, а просто чтобы в списке били эти 2 строки. |