Массив и переход строк

Здравствуйте. Есть двумерный массив, как сделать так: если первая строка пуста, то заполнялась первая строка, а если она не пуста, то вторая, и т.д. 3-ю, 4-ю... используется string. Пытался сделать через if..then почему то постоянно заполняется только 1 строка. Нужен сам код.
Const
n = 50;
m = 5;
var
i, j:integer;
maslistauto : array[1..n,1..m] of string;
strmarka, strnumberauto, strwhatauto, strmoney: string;
begin
strmarka := marka.text;
strnumberauto := numberauto.text;
strwhatauto := whatauto.text;
strmoney := money.text;
listauto.RowCount := n;
listauto.ColCount := m;
maslistauto[1,1]:='';
maslistauto[1,2]:='Марка';
maslistauto[1,3]:='Номер';
maslistauto[1,4]:='Что мыть?';
maslistauto[1,5]:='Цена';
if maslistauto[2,2]='' then
begin
for i:=1 to n do
for j:=1 to m do
 begin
 maslistauto[2,2]:=strmarka;
 maslistauto[2,3]:=strnumberauto;
 maslistauto[2,4]:=strwhatauto;
 maslistauto[2,5]:=strmoney;
 listauto.Cells[j-1, i-1] := (maslistauto[i,j]);
 end;
end
else
begin
for i:=1 to n do
for j:=1 to m do
 begin
 maslistauto[3,2]:=strmarka;
 maslistauto[3,3]:=strnumberauto;
 maslistauto[3,4]:=strwhatauto;
 maslistauto[3,5]:=strmoney;
 listauto.Cells[j-1, i-1] := (maslistauto[i,j]);
 end;
end;
Здесь я пытался хотябы 1-ю 2-ю строку. Спасибо
9 ответов

i := 2;
while maslistauto[i, 2] <> '' do
 inc(i);
maslistauto[i,2] := strmarka;
maslistauto[i,3] := strnumberauto;
maslistauto[i,4] := strwhatauto;
maslistauto[i,5] := strmoney;
Примерно так.


i := 2;
while maslistauto[i, 2] <> '' do
 inc(i);
maslistauto[i,2] := strmarka;
maslistauto[i,3] := strnumberauto;
maslistauto[i,4] := strwhatauto;
maslistauto[i,5] := strmoney;
Примерно так.
Вставил код, вылетает ошибка: [Warning] Unit1.pas(60): Variable 'j' might not have been initialized. Ругается на вывод.


Не путайте предупреждение (warning) и ошибку (error). Тем более, это всего лишь пример. Уберите из раздела var переменную j, если не используете её, или присвойте ей какое-либо начальное значение перед использованием.


Variable 'j' might not have been initialized.
Это предупреждение - переменная j не инициализирована. В Делфи переменной при объявлении просто выделяется место в памяти. При этом всем пофигу что там находилось до этого. Поэтому в j сразу после создания может находится любое число и очень высока вероятность, что при следующем запуске число будет другим. Программер же обычно считает, что число там будет 0. И даже когда он знает, что Делфи ничего не инициализирует, он все равно часто парится и от этого у него при тестовом запуске программы делается длинное лицо. И хотя в данном случае это предупреждение (не ошибка!) не критично, просто возьмите себе за привычку инициализировать свои переменные перед использованием (я это обычно делаю сразу после секции var).


В Делфи переменной при объявлении просто выделяется место в памяти
Справедливо только для простых локальных переменных.


Справедливо только для простых локальных переменных.
А для каких несправедливо?


А для каких несправедливо?
Для глобальных переменных, полей форм, любых переменных имеющих тип с контролируемым временем жизни.


Ну глобальные переменные не существуют для меня . Поля формы принадлежат форме и она отвечает за их поведение, так что пример не удачный.
любых переменных имеющих тип с контролируемым временем жизни
Согласен, но для всяческих массивов и строк я искусственно выделяю длину только перед тем как заполнить. Фактически для меня это одна операция. То есть к чему я все это веду. Нужно лично для себя выработать определенную методику написания программы. Тогда такие мелочи не будут отвлекать мозг (или кость у кого как) от написания программы и употребления кофе.


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