Меня попросили написать код, который добавляет элементы в массив с несколькими условиями. Я искал по всему StackOverflow, чтобы узнать, как найти элемент в массиве, но все выдают ошибки, поэтому я предполагаю, что что-то не так с моим кодом, и я не могу понять, что. Любая помощь приветствуется.
public class WordList
{
String [] words;
int count = 0;
int max = 2;
WordList()
{
words = new String[max];
this.words = words;
this.count = count;
}
public static void main (String[] args)
{
WordList w1 = new WordList();
System.out.println(w1.addWord("Dog"));
System.out.println(w1.addWord("Cat"));
System.out.println(w1.addWord("Fish"));
}
public int addWord(String newWord)
{
for(int i = 0; i < words.length; i++)
{
if (words.contains(newWord) == false && words.length < max)
{
words[i] = newWord;
}
else if (words.contains(newWord) == false && words.length == max)
{
max *= 2;
words[i] = newWord;
}
count = i + 1;
}
return count;
}
вы не можете вызвать метод для массива, я думаю, вы хотите использовать ArrayListgeeksforgeeks.org/array-vs-arraylist-in-java
Я думаю, что вам нужны ArrayLists... Массивы по умолчанию, не имеют этих хороших методов. beginnersbook.com/2013/12/java-массив
max *= 2; просто к вашему сведению, это не изменит размер массива. Вам также потребуется перераспределить его.
Потому что слова String[] не будут иметь этого метода. пожалуйста, используйте любую коллекцию




Я думаю, это то, что вы пытаетесь сделать. Обычные массивы не имеют метода indexOf или contains. Вам нужно использовать Arrays (убедитесь, что вы его тоже импортируете)
public int addWord(String newWord)
{
List <String> myList = Arrays.asList(words);
for(int i = 0; i < words.length; i++)
{
if (myList.indexOf(newWord) == -1 && words.length < max)
{
words[i] = newWord;
}
else if (myList.indexOf(newWord) == -1 && words.length == max)
{
max *= 2;
words[i] = newWord;
}
count = i + 1;
}
return count;
}
Зачем каждый раз преобразовывать массив в список? У него лучшая производительность, если оператор использует список во всей программе.
@jens Ты прав.
Я думаю, вы могли бы использовать Set вместо массива.
public class WordList {
private final Set<String> words = new HashSet<>();
public int addWord(String word) {
if (word != null)
words.add(word);
return words.size();
}
public static void main(String[] args) {
WordList w1 = new WordList();
System.out.println(w1.addWord("Dog"));
System.out.println(w1.addWord("Cat"));
System.out.println(w1.addWord("Fish"));
}
}
В любом случае вам нужно будет написать свой собственный метод, чтобы найти его. Если вы не ограничены в памяти - вы можете преобразовать массив в список и использовать метод .contains().
Arrays.asList(words).contains(newWord);
В противном случае вы можете использовать поток для поиска элемента.
Arrays.stream(words).anyMatch(newWord::equals);
Я думаю, вы ищете что-то вроде этого решения, но здесь используется ArrayList, а не Array. У массивов нет метода contains по умолчанию, и вам нужно будет реализовать свой собственный метод.
import java.util.ArrayList;
import java.util.List;
public class WordList {
private static List<String> words = new ArrayList<>();
public void addWord(String word) {
if (!words.contains(word)) {
words.add(word);
}
}
public static List<String> getWords() {
return words;
}
public static void main(String... args) {
WordList instance = new WordList();
instance.addWord("Dog");
instance.addWord("Cat");
instance.addWord("Fish");
System.out.println(instance.getWords());
}
}
import java.util.HashSet;
import java.util.Set;
public class WordList {
private final Set<String> words = new HashSet<>();
public static void main(String[] args) {
WordList w1 = new WordList();
System.out.println(w1.addWord("Dog"));
System.out.println(w1.addWord("Cat"));
System.out.println(w1.addWord("Fish"));
}
public int addWord(String word) {
words.add(word);
return words.size();
}
}
Хотя этот фрагмент кода может решить проблему, включая объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для будущих читателей, и эти люди могут не знать причин вашего предложения кода.
Ошибка была в words.contains(newWord)
cannot find symbol symbol: method contains(String) location: variable words of type String[]
Это может быть решено путем изменения кода -
Arrays.asList(words).contains(newWord) вместо words.contains(newWord).
Помните, что вам нужно будет импортировать java.util.Arrays
Полный код -
import java.util.Arrays;
/**
*
* @author pronet
*/
public class WordList
{
String [] words;
int count = 0;
int max = 2;
WordList()
{
words = new String[max];
this.words = words;
this.count = count;
}
public static void main (String[] args)
{
WordList w1 = new WordList();
System.out.println(w1.addWord("Dog"));
System.out.println(w1.addWord("Cat"));
System.out.println(w1.addWord("Fish"));
}
public int addWord(String newWord)
{
for(int i = 0; i < words.length; i++)
{
if (Arrays.asList( words ).contains(newWord) == false && words.length < max)
{
words[i] = newWord;
}
else if (Arrays.asList( words ).contains(newWord) == false && words.length == max)
{
max *= 2;
words[i] = newWord;
}
count = i + 1;
}
return count;
}
}
Надеюсь, это поможет вам.
Если вы получили сообщение об ошибке, поделитесь им