前提・実現したいこと
1~99の乱数100個から上限と下限を入力して間の値を昇順で表示したいです。
発生している問題・エラーメッセージ
Arrays.sortで昇順からi番目のを表示してしまうと重複した値が原因でずれてしまい、うまく上限と下限が反映しなくなる。
実行例
乱数一覧
34 33 46 17 56 73 71 20 17 81
28 54 75 36 76 4 7 78 81 58
80 5 82 3 39 8 48 42 81 81
45 51 72 31 94 20 59 37 86 77
74 30 59 78 16 97 61 94 7 22
85 75 7 27 93 4 38 72 92 70
99 5 63 31 52 96 45 93 41 63
9 79 2 48 21 58 31 83 32 69
66 6 6 21 28 33 47 6 76 45
52 83 15 43 49 85 41 5 5 67
抽出する下限と上限を入力してください
下限
16
上限
21
16と21の間のデータは昇順で
15 16 17 17 20 20
の6件です
このように15が表示されてしまったり、21が表示されなくなります。
該当のソースコード
Java
1import java.util.Arrays; 2import java.util.Random; 3import java.util.Scanner; 4 5public class RandomNumber { 6 public static void main(String[] args) { 7 Random ran = new Random(); 8 // 要素数100の配列を宣言 9 int[] lists = new int[100]; 10 System.out.print("乱数一覧"); 11 for (int i = 0; i < lists.length; i++) { 12 int Number = ran.nextInt(99) + 1; 13 lists[i] = Number; 14 } 15 // 改行と空白を付与し、一覧を表示 16 for (int i = 0; i < lists.length; i++) { 17 if (i % 10 == 0) { 18 System.out.println(""); 19 } 20 System.out.print(lists[i] + " "); 21 } 22 // 上限と下限を入力する 23 Scanner sc = new Scanner(System.in); 24 25 System.out.println("\n"); 26 System.out.println("抽出する下限と上限を入力してください"); 27 System.out.println("下限"); 28 int min = sc.nextInt(); 29 System.out.println("上限"); 30 int max = sc.nextInt(); 31 // 昇順にソートする 32 Arrays.sort(lists); 33 34 System.out.printf("%n%dと%dの間のデータは昇順で%n", min, max); 35 36 // 昇順の件数をカウントする変数を宣言 37 int count = 0; 38 for (int i = min; i <= max; i++) { 39 System.out.print(lists[i] + " "); 40 count++; 41 } 42 43 System.out.printf("%nの%d件です%n%n", count); 44 sc.close(); 45 } 46} 47
回答2件
あなたの回答
tips
プレビュー