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

回答編集履歴

4

bit を使用しないコードを追加

2020/07/28 01:14

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -45,4 +45,57 @@
45
45
  ```
46
46
  理解できない場合は、どこが分からないのかを具体的に質問してください。
47
47
  そうすれば、できるだけ説明します。
48
- 理解できた場合は、コードの説明をお願いします。
48
+ 理解できた場合は、コードの説明をお願いします。
49
+
50
+ **追記**
51
+ ビット処理も HashSet も使用しないなら、
52
+ ```Java
53
+ import java.util.Arrays;
54
+
55
+ class Test {
56
+ public static void main(String[] args) {
57
+ int num1[] = { 4, 9, 4, 3, 6, 8, 7, 1, 3, 10 };
58
+ int num2[] = { 7, 3, 10, 7, 5, 9, 4, 9, 9, 1 };
59
+ int same[] = new int[10];
60
+ int side[] = new int[10];
61
+
62
+ int n = 0, m = 0;
63
+
64
+ for (int i = 0; i < num1.length; i++) {
65
+ if (find(num2, num1[i])) // num2 の中に num1[i] があれば
66
+ n = add(same, n, num1[i]); // same に num1[i] を追加
67
+ m = add(side, m, num1[i]); // side に num1[i] を追加
68
+ }
69
+
70
+ for (int i = 0; i < num2.length; i++)
71
+ m = add(side, m, num2[i]); // side に num2[i] を追加
72
+
73
+ Arrays.sort(same, 0, n); // データ数 n の same をソート
74
+ Arrays.sort(side, 0, m); // データ数 m の side をソート
75
+
76
+ System.out.print("配列1:"); print(num1, num1.length);
77
+ System.out.print("配列2:"); print(num2, num2.length);
78
+ System.out.print("共通の数:"); print(same, n);
79
+ System.out.print("どちらかの数:"); print(side, m);
80
+ }
81
+
82
+ public static void print(int[] a, int n) {
83
+ for (int i = 0; i < n; i++)
84
+ System.out.print(" " + a[i]);
85
+ System.out.println();
86
+ }
87
+
88
+ public static boolean find(int[] a, int e) {
89
+ for (int i = 0; i < a.length; i++)
90
+ if (a[i] == e) return true; // 見つかれば true を返す
91
+ return false; // 見つからなかったので false を返す
92
+ }
93
+
94
+ public static int add(int[] a, int n, int e) {
95
+ for (int i = 0; i < n; i++)
96
+ if (a[i] == e) return n; // 既にあればデータ数はそのまま
97
+ a[n] = e; // 無かったので追加
98
+ return n + 1; // データ数を増やす
99
+ }
100
+ }
101
+ ```

3

関数名を変更

2020/07/28 01:14

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -6,13 +6,13 @@
6
6
  int num2[] = { 7, 3, 10, 7, 5, 9, 4, 9, 9, 1 };
7
7
  int bit1 = setBit(num1);
8
8
  int bit2 = setBit(num2);
9
- System.out.print("配列1:"); print(num1);
9
+ System.out.print("配列1:"); printA(num1);
10
- System.out.print("配列2:"); print(num2);
10
+ System.out.print("配列2:"); printA(num2);
11
- System.out.print("共通の数: "); print2(bit1 & bit2);
11
+ System.out.print("共通の数: "); printB(bit1 & bit2);
12
- System.out.print("どちらかに入っている数:"); print2(bit1 | bit2);
12
+ System.out.print("どちらかに入っている数:"); printB(bit1 | bit2);
13
- System.out.print("一方だけに入っている数:"); print2(bit1 ^ bit2);
13
+ System.out.print("一方だけに入っている数:"); printB(bit1 ^ bit2);
14
- System.out.print("配列1 だけに入っている数:"); print2(bit1 & ~bit2);
14
+ System.out.print("配列1 だけに入っている数:"); printB(bit1 & ~bit2);
15
- System.out.print("配列2 だけに入っている数:"); print2(~bit1 & bit2);
15
+ System.out.print("配列2 だけに入っている数:"); printB(~bit1 & bit2);
16
16
  }
17
17
 
18
18
  static int setBit(int[] a) {
@@ -21,12 +21,12 @@
21
21
  return bit;
22
22
  }
23
23
 
24
- static void print(int[] a) {
24
+ static void printA(int[] a) { // print Array
25
- for (int i = 0; i < 10; i++) System.out.print(" " + a[i]);
25
+ for (int i = 0; i < a.length; i++) System.out.print(" " + a[i]);
26
26
  System.out.println();
27
27
  }
28
28
 
29
- static void print2(int bit) {
29
+ static void printB(int bit) { // print Bits
30
30
  for (int i = 1; i <= 10; i++)
31
31
  if ((bit >> i & 1) != 0) System.out.print(" " + i);
32
32
  System.out.println();

2

誤字修正

2020/07/27 13:00

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -1,4 +1,4 @@
1
- 前回の答の追記のコードの (bit1 ^ bit2) を (bit1 | bit2) にするだけなんですが。
1
+ 前回の答の追記のコードの (bit1 ^ bit2) を (bit1 | bit2) にするだけなんですが。
2
2
  ```Java
3
3
  class Test {
4
4
  public static void main(String[] args) {

1

語句修正

2020/07/27 12:47

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -11,8 +11,8 @@
11
11
  System.out.print("共通の数: "); print2(bit1 & bit2);
12
12
  System.out.print("どちらかに入っている数:"); print2(bit1 | bit2);
13
13
  System.out.print("一方だけに入っている数:"); print2(bit1 ^ bit2);
14
- System.out.print("num1 だけに入っている数:"); print2(bit1 & ~bit2);
14
+ System.out.print("配列1 だけに入っている数:"); print2(bit1 & ~bit2);
15
- System.out.print("num2 だけに入っている数:"); print2(~bit1 & bit2);
15
+ System.out.print("配列2 だけに入っている数:"); print2(~bit1 & bit2);
16
16
  }
17
17
 
18
18
  static int setBit(int[] a) {
@@ -40,8 +40,8 @@
40
40
  共通の数: 1 3 4 7 9 10
41
41
  どちらかに入っている数: 1 3 4 5 6 7 8 9 10
42
42
  一方だけに入っている数: 5 6 8
43
- num1 だけに入っている数: 6 8
43
+ 配列1 だけに入っている数: 6 8
44
- num2 だけに入っている数: 5
44
+ 配列2 だけに入っている数: 5
45
45
  ```
46
46
  理解できない場合は、どこが分からないのかを具体的に質問してください。
47
47
  そうすれば、できるだけ説明します。