Здравствуйте. Возник вопрос по задаче. Смог решить её, инициализировав строковую переменную current в начале цикла, который перебирает строки массива и проверяет их на идентичность. Данная строковая переменная в начале цикла получает значение strings[i] и занимает его место в
if (strings[i].equalsIgnoreCase(strings[j]))
В моём первоначальном решении, которое прикрепил ниже, возникает java.lang.NullPointerException
package com.javarush.task.pro.task05.task0508;
import java.util.Scanner;
/*
Удаляем одинаковые строки
*/
public class Solution {
public static String[] strings;
public static void main(String[] args) {
//напишите тут ваш код
Scanner input = new Scanner(System.in);
strings = new String[6];
for (int i = 0; i < strings.length; i++)
strings[i] = input.nextLine();
for (int i = 0; i < strings.length; i++)
{
if (strings[i] != null)
{
for (int j = i + 1; j < strings.length; j++)
{
if (strings[i].equalsIgnoreCase(strings[j]))
{
strings[i] = null;
strings[j] = null;
}
}
}
}
for (int i = 0; i < strings.length; i++) {
System.out.print(strings[i] + ", ");
}
}
}
Суть вопроса - в чём принципиальная разница между этими двумя подходами? Фактически переменная и так получает значение strings[i], но при этом не вызывает java.lang.NullPointerException, как если бы я обращался напрямую к элементу массива. Логика на первый взгляд идентичная.