Я отладил этот код, и он, кажется, запускает цикл for, хотя условие завершения выполнено.
Эта программа принимает два типа ввода:
Строка 1 - Сколько точек данных существует (N)
Строки от 2 до N - Точки данных
Затем программа должна распечатать наименьшую разницу между всеми точками данных.
Так, например, пример ввода будет (в отдельных строках): 3 5 8 9
Есть 3 точки данных (5 8 9), и наименьшая разница между 8 и 9, поэтому программа должна вернуть 1.
Я пытаюсь построить программу так, чтобы точки данных заполнялись в массив одновременно с выполнением сравнений. Очевидно, я мог бы разделить эти проблемы, но я экспериментирую. Вот оно:
package com.m3c.vks.test;
import java.util.*;
import java.io.*;
import java.math.*;
class Solution {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int N = in.nextInt(); //How many data points there will be
int strengthArray[] = new int[N]; //Initialise the array to be of length = N, the first input line
int tempStrengthDifference=99999; //junk difference set arbitrarily high - bad practice I know
int lowestStrengthDifference=99999;
for (int i = 0; i < N; i++) //Go through all elements of array
{
strengthArray[i] = in.nextInt(); //read a value for the ith element
System.out.println("i: " + i); //test
if (i > 0) //do not execute the next for loop if i = 0 as cannot evaluate sA[-1]
{
for (int j = i - 1; j < 1; j--) // **this is line 20** from wherever the array has populated up to, work backwards to compare the numbers which have been fed in thus far
{
System.out.println("j: " + j); //test
tempStrengthDifference = Math.abs(strengthArray[i] - strengthArray[j]); //finding the difference between two values
if (tempStrengthDifference < lowestStrengthDifference) //store the lowest found thus far in lowestSD
{
lowestStrengthDifference = tempStrengthDifference;
}
}
}
}
System.out.println(lowestStrengthDifference);
}
}
Все в порядке, пока i = 1 в строке 20. В этот момент для j установлено значение i - 1 = 0, и разница найдена. Однако, когда цикл for возвращается снова, условие завершения j <1 не выполняется, и вместо этого цикл продолжает устанавливать j = -1, и в этот момент он выбрасывает ошибку «за пределами границ», поскольку он явно не может оценивать forceArray. [-1] </p>
Есть идеи? Спасибо