addで情報を加えたいのですが、addを加えるとエラーが出てしまいます。
maxSize を超えた分古いデータは削除の部分のif文の条件式にlengthやsizeを使ったところエラーがでてしまい、どう文字列の長さを表現すればよいかわかりません
実行したい内容
add 'Java'
=> [Java]
add 'Python'
=> [Java, Python]
add ''
add ''
add 'JavaScript'
=> [Java, Python, JavaScript]
add 'Go'
=> [Python, JavaScript, Go]
add 'Swift'
=> [JavaScript, Go, Swift]
add 'Go'
=> [JavaScript, Swift, Go]
add 'Rust'
=> [Swift, Go, Rust]
現状の実行結果
Exception in thread "main" java.lang.StackOverflowError
at java.base/java.lang.String.equals(String.java:1009)
at ex5.SearchHistory.add(SearchHistory.java:25)
at ex5.SearchHistory.add(SearchHistory.java:28)
at ex5.SearchHistory.add(SearchHistory.java:28)
at ex5.SearchHistory.add(SearchHistory.java:28)
at ex5.SearchHistory.add(SearchHistory.java:28)
at ex5.SearchHistory.add(SearchHistory.java:28)
at ex5.SearchHistory.add(SearchHistory.java:28)
at ex5.SearchHistory.add(SearchHistory.java:28)
at ex5.SearchHistory.add(SearchHistory.java:28)
java
1コード 2package ex5; 3 4import java.util.ArrayDeque; 5import java.util.Queue; 6 7public class SearchHistory extends ArrayDeque<String> { 8 private int maxSize; 9 10 public SearchHistory(int maxSize) { 11 // TODO: 初期化 12 this.maxSize=maxSize; 13 } 14 15 /** 16 * word を追加する。空文字の場合は追加しない。 17 * すでに入っていた文字は入れ直す。 18 * maxSize を超えた分古いデータは削除 19 * 20 * @param word 21 * @return 追加したか否か 22 */ 23 @Override 24 public boolean add(String word) { 25 // TODO: 空文字は保存せず false を返す 26 if (word.equals("")) { 27 return false; 28 } else { 29 add(word); 30 } 31 // TODO: すでに入っている文字は入れ直す 32 if (word.contains(word)) { 33 remove(word); 34 add(word); 35 } 36 // TODO: maxSize を超えた分古いデータは削除 37 if (word.length<=maxSize) { 38 remove(word[0]); 39 } 40 return true; 41 } 42 43 public static void main(String[] args) { 44 Queue<String> queue = new SearchHistory(3); 45 46 String[] orders = new String[]{"Java", "Python", "", "", "JavaScript", "Go", "Swift", "Go", "Rust"}; 47 for (String s : orders) { 48 boolean added = queue.add(s); 49 System.out.println("add '" + s + "'"); 50 if (added) { 51 System.out.println(" => " + queue); 52 } 53 } 54 } 55} 56 57
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/08 06:41