teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記と変更

2020/04/09 23:42

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  **StringBuffer**
2
2
 
3
- `StringBuffer`を使う練習です。`insert(0,文字列)`で、読んだ文字列を先頭に挿入するのでsort不要。`StringBuffer`でなくても、先頭に要素を追加できるコレクションなら同じ考え方で使えます。`System.getLineSeparator()`はOSごとに異る改行文字列を取得します。
3
+ `StringBuffer`を使う練習です。`insert(0,文字列)`で、読んだ文字列を先頭に挿入するのでreverse不要。`StringBuffer`でなくても、先頭に要素を追加できるコレクションなら同じ考え方で使えます。`System.getLineSeparator()`はOSごとに異る改行文字列を取得します。
4
4
 
5
5
 
6
6
  ```Java
@@ -70,4 +70,29 @@
70
70
  System.out.print(result.orElse("入出力例外が発生しました"+sep));
71
71
  }
72
72
  }
73
+ ```
74
+
75
+ ###
76
+ **Deque(追記)**
77
+
78
+ Collectionの`Deque`を利用する解を追加します。考え方は、StringBufferと同じで、先頭に要素を追加します。もっともコンパクトな回答だと思われます。
79
+
80
+ ```Java
81
+ import java.io.BufferedReader;
82
+ import java.io.IOException;
83
+ import java.io.InputStreamReader;
84
+ import java.util.ArrayDeque;
85
+ import java.util.Deque;
86
+
87
+ public class Assignment5_Deque {
88
+ public static void main(String[] args) {
89
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
90
+ var result = br.lines().collect(ArrayDeque::new,Deque::addFirst,Deque::addAll);
91
+ result.addFirst("<逆順リスト>");
92
+ result.forEach(System.out::println);
93
+ } catch (IOException e) {
94
+ System.out.println("入出力例外が発生しました");
95
+ }
96
+ }
97
+ }
73
98
  ```

2

バグ修正:StringBuilderの余分な改行を削除

2020/04/09 23:42

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -16,7 +16,7 @@
16
16
  for (String line; (line = br.readLine()) != null;) {
17
17
  result.insert(0, line + sep); // 先頭に追加
18
18
  }
19
- System.out.println("<逆順リスト>" + sep + result);
19
+ System.out.print("<逆順リスト>" + sep + result);
20
20
  } catch (IOException e) {
21
21
  System.out.println("入出力例外が発生しました");
22
22
  }
@@ -67,7 +67,7 @@
67
67
  } catch (IOException e) {
68
68
  result = Optional.empty();
69
69
  }
70
- System.out.println(result.orElse("入出力例外が発生しました"));
70
+ System.out.print(result.orElse("入出力例外が発生しました"+sep));
71
71
  }
72
72
  }
73
73
  ```

1

再帰版は直接出力に変更

2020/04/05 05:21

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -27,18 +27,21 @@
27
27
  参考です。ループの代わりに再帰を利用する練習。
28
28
 
29
29
  ```Java
30
- static final String sep = System.lineSeparator();
31
30
  public static void main(String[] args) {
32
31
  try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
33
- System.out.println("<逆順リスト>" + sep + reverse(br, new StringBuffer()));
32
+ reverse(br);
34
33
  } catch (IOException e) {
35
34
  System.out.println("入出力例外が発生しました");
36
35
  }
37
36
  }
38
- static StringBuffer reverse(BufferedReader br, StringBuffer buff) throws IOException {
37
+ static void reverse(BufferedReader br) throws IOException {
39
38
  String line;
40
- if ((line = br.readLine()) == null) return buff;
39
+ if ((line = br.readLine()) == null) {
41
- return reverse(br, buff.insert(0, line + sep));
40
+ System.out.println("<逆順リスト>");
41
+ return;
42
+ }
43
+ reverse(br);
44
+ System.out.println(line);
42
45
  }
43
46
  ```
44
47