- Вы используете
value.equals(-999)
, но значение равно ArrayList<Double>
, а -999 - это просто double
(на самом деле int). Вы не хотите проверять, равен ли весь список -999, вы просто хотите проверить, было ли последнее введенное значение -999.
Если вы не хотите разрешать дубликаты, вы должны использовать Set
, а не ArrayList
.
Когда вы получаете InputMismatchException, вам нужно вызвать in.nextLine (), прежде чем просить пользователя о еще одном double. Это потому, что если вы не вызовете in.nextLine (), ваш сканер все равно будет пытаться прочитать тот же текст, который вызвал исключение в предыдущий раз.
Вот (сильно измененное) изменение вашего кода, которое должно работать так, как вы намереваетесь: (Возможно, вы захотите использовать другую реализацию Set
, в зависимости от ваших потребностей).
public static void main(String[] args) {
double d = 0.0; //d is set to some unused starting value so it will compile.
double average;
double max;
double min;
Set<Double> values = new HashSet<Double>();
Scanner input = new Scanner(System.in);
while (true) {
try {
System.out.println("Enter a double value (-999 to exit):");
d = input.nextDouble();
} catch (InputMismatchException e) {
System.out.println("That is not a valid double value.");
input.nextLine();
continue;
} catch (Exception e) {
System.out.println("Error");
break;
}
if(d == -999.)
break;
else if(!values.add(d))
System.out.println("Duplicate value");
}
//System.out.println(values);
}
Я бы также порекомендовал вы переименовываете «значение» в «значения», чтобы было ясно, что оно представляет несколько значений.
Надеюсь, это поможет!