Для пользователей Java вы можете использовать это в наборе данных:
public boolean isDatasetEmpty(Dataset<Row> ds) {
boolean isEmpty;
try {
isEmpty = ((Row[]) ds.head(1)).length == 0;
} catch (Exception e) {
return true;
}
return isEmpty;
}
Это проверяет все возможные сценарии (пустые, нулевые).
Если вы i ++ внутри блока if, вы входите в бесконечный цикл: (
while (i < x.Length)
{
if (x[i] > max)
{
max = x[i];
i++;
}
}
предположим, что этот массив x = new int [] {9, 8}
i = 1
max = 9
while ( 1 < 2 ){//and 1<2 is always true i=1 and x.length=2
if ( 8 > 9){ //false, never enter
max = 8
i++ //never happens, i is always 1
}
}
если у вас проблемы с индексами, вы можете использовать «foreach» вместо «while»
int[] x = new int[] { 5, 7, -100, 400, 8 };
int max;
max = x[0];
foreach (int elem in x)
{
if (elem > max)
max = elem;
}
Console.WriteLine("MAX=" + max);
Console.ReadLine();
Предположим, что если ваш массив состоит из следующих значений
int[] x = new int[] { 2, 2, 2, 2, 2 };
, то как вы можете найти максимальное значение, используя i++
внутри блока if
. Вы застрянете в бесконечном цикле.
Если вы поместите его в блок if, я буду увеличивать его только при увеличении максимума, позволяя циклу while работать вечно, если каждое значение в массиве больше предыдущего.
Если вы только увеличивали i
внутри блока if
, то, как только условие x[i] > max
оценивается как false
, i
не будет увеличиваться. И поскольку мы используем i
в качестве индекса для элемента массива, который нужно исследовать, значение x[i]
никогда не изменится, и поэтому цикл будет продолжаться вечно.
И, для чего стоит, когда вы выполняете итерацию по массиву, цикл for
лучше подходит, потому что он позволяет вам определять переменную итерации, условие и приращение - все в одном месте: [ 1111]
int[] x = new int[] { 5, 7, -100, 400, 8 };
int max = x[0];
for(int i = 1; i < x.Length; i++)
{
if (x[i] > max) max = x[i];
}
Console.WriteLine("MAX = " + max);