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

質問編集履歴

1

知識不足で申し訳ないのですが、知りたいところを詳しくしたので細かく(できればソースコードを)教えていただけると助かります。

2020/05/28 03:41

投稿

java_0527
java_0527

スコア4

title CHANGED
@@ -1,1 +1,1 @@
1
- 数字、英語大文字、英語小文字それぞれ最低1文字含ませ8ケタのパードを生成するプログラム” Java
1
+ 条件さなければ繰り返すソーード” Java
body CHANGED
@@ -1,62 +1,59 @@
1
+ #条件を満たさなければ繰り返すソースコード Java
1
- # ”数字、英語大文字、英語小文字をそれぞれ最低1文字含ませた8ケタのパスワードを生成するプログラム”
2
+ ”数字、英語大文字、英語小文字をそれぞれ最低1文字含ませた8ケタのパスワードを生成するプログラム”を作りたいのですが、~~で囲まれている範囲を”数字、英語大文字、英語小文字をそれぞれ最低1文字含んでいなければパスワードを再作成する”ようにしたいです。
2
- をjavaを利用してつくりたいです。
3
3
 
4
4
 
5
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6
5
  import java.util.Random;
7
6
 
8
7
  public class RandomSample {
9
8
 
10
- public static void main(String[] args) {
9
+ public static void main(String[] args) {
11
10
 
12
- int length = 8;
11
+ int length = 8;
13
- boolean useSign = false;
12
+ boolean useSign = false;
14
- String style = "normal";
13
+ String style = "normal";
15
14
 
16
- StringBuilder result = new StringBuilder();
15
+ StringBuilder result = new StringBuilder();
17
-
18
- StringBuilder source = new StringBuilder();
19
-
20
- for (int i = 0x30; i < 0x3A; i++) {
21
- source.append((char) i);
22
- }
23
-
24
- if (useSign) {
25
- for (int i = 0x21; i < 0x30; i++) {
26
- source.append((char) i);
27
- }
28
- }
29
-
30
- switch (style) {
31
- case "lowerCase":
32
- break;
33
- default:
34
- for (int i = 0x41; i < 0x5b; i++) {
35
- source.append((char) i);
36
- }
37
- break;
38
- }
39
-
40
- switch (style) {
41
- case "upperCase":
42
- break;
43
- default:
44
- for (int i = 0x61; i < 0x7b; i++) {
45
- source.append((char) i);
46
- }
47
- break;
48
- }
49
16
 
50
- int sourceLength = source.length();
51
- Random random = new Random();
17
+ StringBuilder source = new StringBuilder();
18
+
52
- while (result.length() < length) {
19
+ for (int i = 0x30; i < 0x3A; i++) {
53
- result.append(source.charAt(Math.abs(random.nextInt()) % sourceLength));
54
- }
55
-
56
- System.out.format("%1$s", result);
20
+ source.append((char) i);
57
- }
58
21
  }
59
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60
- 英数字を利用した8ケタのパスワードを出力するまではできたのですが、数字を含まない場合があります。
61
22
 
23
+ if (useSign) {
24
+ for (int i = 0x21; i < 0x30; i++) {
25
+ source.append((char) i);
26
+ }
27
+ }
28
+
29
+ switch (style) {
30
+ case "lowerCase":
31
+ break;
32
+ default:
33
+ for (int i = 0x41; i < 0x5b; i++) {
34
+ source.append((char) i);
35
+ }
36
+ break;
37
+ }
38
+
39
+ switch (style) {
40
+ case "upperCase":
41
+ break;
42
+ default:
43
+ for (int i = 0x61; i < 0x7b; i++) {
44
+ source.append((char) i);
45
+ }
46
+ break;
47
+ }
48
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
49
+ int sourceLength = source.length();
50
+ Random random = new Random();
62
- これに何を足せばいいのでしょうか、または別のプログラムがいいのでしょうか?
51
+ while (result.length() < length) {
52
+ result.append(source.charAt(Math.abs(random.nextInt()) % sourceLength));
53
+ }
54
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55
+ System.out.format("%1$s", result);
56
+ }
57
+ }
58
+
59
+ 知識不足のため、できるだけ詳しく教えていただけると助かります。よろしくお願いします。