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

回答編集履歴

3

負数最大値に対応(暫定)

2019/11/15 03:04

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -5,12 +5,13 @@
5
5
  private static String commaSeparatedString(int i) {
6
6
  StringBuilder sb = new StringBuilder();
7
7
  //負数は正数化
8
+ long l = i;
8
- if(i < 0) {
9
+ if(l < 0) {
9
10
  sb.append('-');
10
- i *= -1;
11
+ l *= -1;
11
12
  }
12
13
  //文字列化
13
- String s = ""+i;
14
+ String s = ""+l;
14
15
  //最初の1~SEPARATE_WIDTH文字を処理
15
16
  int e = s.length() % SEPARATE_WIDTH;
16
17
  if(e == 0) e = SEPARATE_WIDTH;

2

"3" を定数化

2019/11/15 03:04

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -1,6 +1,7 @@
1
1
  String を返す形にしています.
2
2
 
3
3
  ```java
4
+ static final int SEPARATE_WIDTH = 3;
4
5
  private static String commaSeparatedString(int i) {
5
6
  StringBuilder sb = new StringBuilder();
6
7
  //負数は正数化
@@ -10,13 +11,13 @@
10
11
  }
11
12
  //文字列化
12
13
  String s = ""+i;
13
- //最初の1~3文字を処理
14
+ //最初の1~SEPARATE_WIDTH文字を処理
14
- int e = s.length() % 3;
15
+ int e = s.length() % SEPARATE_WIDTH;
15
- if(e == 0) e = 3;
16
+ if(e == 0) e = SEPARATE_WIDTH;
16
17
  sb.append(s.substring(0, e));
17
- //残りを3文字ずつ処理
18
+ //残りをSEPARATE_WIDTH文字ずつ処理
18
- for(int j=e; j<s.length(); j+=3) {
19
+ for(int j=e; j<s.length(); j+=SEPARATE_WIDTH) {
19
- sb.append(',').append(s.substring(j, j+3));
20
+ sb.append(',').append(s.substring(j, j+SEPARATE_WIDTH));
20
21
  }
21
22
 
22
23
  return sb.toString();

1

s を更新せず index を使うように修正

2019/11/14 16:43

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -14,11 +14,9 @@
14
14
  int e = s.length() % 3;
15
15
  if(e == 0) e = 3;
16
16
  sb.append(s.substring(0, e));
17
- s = s.substring(e);
18
17
  //残りを3文字ずつ処理
19
- while(s.length() >= 1) {
18
+ for(int j=e; j<s.length(); j+=3) {
20
- sb.append(',').append(s.substring(0, 3));
19
+ sb.append(',').append(s.substring(j, j+3));
21
- s = s.substring(3);
22
20
  }
23
21
 
24
22
  return sb.toString();