質問編集履歴

3

要点を簡潔にした

2019/05/18 08:44

投稿

zero1na
zero1na

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,96 +1,8 @@
1
1
  javaプログラミングに関する質問です。
2
2
 
3
- mainクラスとサブクラスが以下です。
3
+ サブクラスが以下です。
4
4
 
5
-
6
-
7
- 【main】
8
-
9
- public class Matching {
10
-
11
-
12
-
13
- public static void main(String[] args) {
14
-
15
-
16
-
17
- final char[] myName = {'石', '川', '唯'};
18
-
19
- if (0 < args.length) {
20
-
21
- Person person = new Person(myName);
22
-
23
- System.out.println("私の名前は" + person.getNameString()
24
-
25
- + "、ネームコードは" + person.getNameCode() + "です。");
26
-
27
- System.out.println(args[0] + "さんとの相性は"
28
-
29
- + person.getCompatibility(args[0]) + "%です。");
30
-
31
- } else {
32
-
33
- System.out.println("相手の名前を入力してください。");
34
-
35
- }
36
-
37
- }
38
-
39
- }
40
-
41
-
42
-
43
- 【サブ】
5
+ 【サブ】
44
-
45
- public class Person{
46
-
47
- private char[] myName;
48
-
49
- public Person(){
50
-
51
- }
52
-
53
-
54
-
55
- public Person(char[] name){
56
-
57
- myName = name; //引数nameの値を変数myNameに格納
58
-
59
- }
60
-
61
-
62
-
63
- public String getNameString(){
64
-
65
- String name = "";
66
-
67
- for(int i = 0; i < myName.length; i++){
68
-
69
- name = name + myName[i];
70
-
71
- }
72
-
73
- return name;
74
-
75
- }
76
-
77
-
78
-
79
- public int getNameCode(){
80
-
81
- int name = 0;;
82
-
83
- for(int i = 0; i < myName.length; i++){
84
-
85
- name = name + myName[i];
86
-
87
- }
88
-
89
- return name;
90
-
91
- }
92
-
93
-
94
6
 
95
7
  public int getCompatibility(String otherName){
96
8
 
@@ -112,16 +24,6 @@
112
24
 
113
25
 
114
26
 
115
- }
116
-
117
- }
118
-
119
-
120
-
121
- 処理としては相性マッチング処理ですが、getCompatibilityメソッドでエラーになります。
122
-
123
-
124
-
125
27
  <エラー内容>
126
28
 
127
29
  Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
@@ -131,25 +33,3 @@
131
33
  at Person.getCompatibility(Person.java:30)
132
34
 
133
35
  at Matching.main(Matching.java:11)
134
-
135
-
136
-
137
- 仕様は以下です。
138
-
139
- otherName から相手のネームコード otherCode を求める計算です。これまでネームコードは char 型の配列から値を 1 つず つ取り出し int として加算して求めました。char 型の変数は符号無し整数として数値 演算することが可能だったからです。しかし otherName は char 型の配列ではなく String 型です。String 型の文字列のネームコードを計算するには、文字列から 1 文字 ずつ char 型として取り出して加算する必要があります
140
-
141
-
142
-
143
- しかし 1 つだけ問題があります。それは otherName から相手のネームコード otherCode を求める計算です。これまでネームコードは char 型の配列から値を 1 つず つ取り出し int として加算して求めました。char 型の変数は符号無し整数として数値 演算することが可能だったからです。しかし otherName は char 型の配列ではなく String 型です。String 型の文字列のネームコードを計算するには、文字列から 1 文字 ずつ char 型として取り出して加算する必要があります
144
-
145
-
146
-
147
- >個人的意見
148
-
149
- getCompatibilityメソッドでotherNameの引数をotherCodeへどう渡せば良いのかもわかりません。
150
-
151
- int型とString型の違いもあります。
152
-
153
-
154
-
155
- お力添えよろしくお願いいたします。

2

仕様の補足

2019/05/18 08:44

投稿

zero1na
zero1na

スコア11

test CHANGED
File without changes
test CHANGED
@@ -140,6 +140,10 @@
140
140
 
141
141
 
142
142
 
143
+ しかし 1 つだけ問題があります。それは otherName から相手のネームコード otherCode を求める計算です。これまでネームコードは char 型の配列から値を 1 つず つ取り出し int として加算して求めました。char 型の変数は符号無し整数として数値 演算することが可能だったからです。しかし otherName は char 型の配列ではなく String 型です。String 型の文字列のネームコードを計算するには、文字列から 1 文字 ずつ char 型として取り出して加算する必要があります
144
+
145
+
146
+
143
147
  >個人的意見
144
148
 
145
149
  getCompatibilityメソッドでotherNameの引数をotherCodeへどう渡せば良いのかもわかりません。

1

getCompatibilityメソッドのreturnを一部変更

2019/05/18 07:50

投稿

zero1na
zero1na

スコア11

test CHANGED
File without changes
test CHANGED
@@ -106,7 +106,7 @@
106
106
 
107
107
 
108
108
 
109
- return (100 - Math.abs(otherCode - getNameCode())) % 100;
109
+ return 100 - (Math.abs(otherCode - getNameCode()) % 100);
110
110
 
111
111
 
112
112