学校の課題で、どこが間違えているのかわかりません。
受付中
回答 0
投稿
- 評価
- クリップ 2
- VIEW 653
import java.util.Random;
import java.util.Scanner;
import java.util.Arrays;
class MyClass {
// 乱数を全体で共有
static Random rnd;
// 整数乱数(0-19)配列を作成
static int[] make_ints_r(int n) {
int[] x = new int[n];
for(int i = 0; i < n; i++) {
x[i] = (int)(rnd.nextDouble() * 20);
}
return x;
}
// ランダムな英数文字列(2文字)配列を作成
static String[] make_strs(int n) {
char[] c_map = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
int c_len = c_map.length;
String[] strs = new String[n];
for(int i = 0; i < n; i++) {
char[] c_tmp = new char[2];
for(int j = 0; j < c_tmp.length; j++) {
c_tmp[j] = c_map[(int)(rnd.nextDouble() * c_len)];
}
strs[i] = new String(c_tmp);
}
return strs;
}
// 整数配列を表示
static void print_value(int[] x) {
for(int i = 0; i < x.length; i++) {
System.out.printf("%2d,", x[i]);
}
System.out.println();
}
// 文字列配列を表示
static void print_value(String[] x) {
for(int i = 0; i < x.length; i++) {
System.out.printf("%s,", x[i]);
}
System.out.println();
}
// 目盛を表示
static void print_index(int n) {
// 分かりやすさのため色付け(コンソールのみ)
System.out.print("index\033[4;103m|");
for(int i = 0; i < n; i++) {
System.out.printf("%2d|", i);
}
// 色付けをリセット
System.out.println("\033[0m");
}
// 探索位置の前までを空白で表示
static void print_presp(int n) {
for(int i = 0; i < n; i++) {
System.out.print(" ");
}
}
/* 線形探索(複数の結果に対応)
- 探索する値の配列中の位置を返す(途中経過も出力)
- sv: 探索する値(整数)
- x: 配列(整数)
*/
/* 指示1ここから - 探索値がデータ列中に複数あっても全てを列挙できるよう
- メソッド linearSearch2() を修正しなさい.
*/
static int[] linearSearch2(int sv, int[] x) {
int cnt = 1;
int j = 0;
int[] fi = new int[x.length+1];
Arrays.fill(fi, -1);
for(int i = 0; i < x.length; i++) {
System.out.printf("[%03d] ", cnt++);
print_presp(i);
if(x[i] == sv) { // 発見したら
System.out.println("++ ");
fi[j++] = i;
}
else{
System.out.println("-- ");
}
}
return fi;
}
// 指示1ここまで
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 乱数を準備
System.out.print("乱数の種(入力が整数以外なら自動設定):");
// 整数が入力された場合は,それを種とする
if(scan.hasNextLong()) {
rnd = new Random(scan.nextLong());
}
else {
rnd = new Random();
scan.nextLine(); // 入力を捨てる
}
// 各変数の宣言
int[] x = make_ints_r(30); // 整数データ列
String[] strs = make_strs(30); // 対応する文字列の列
int sv; // 探索値
int[] fi; // 探索結果
// 探索値を設定(0-9)
System.out.print("探索値(入力が整数以外なら自動設定):");
// 整数以外が入力された場合は乱数(0-9)
if(scan.hasNextInt()) {
sv = scan.nextInt();
}
else {
sv = (int)(rnd.nextDouble()*10);
scan.nextLine(); // 入力を捨てる
}
System.out.println(""); // 改行のみ
scan.close(); // データ読み込みの完了
// ヘッダー部を表示
System.out.println(sv + "を探します");
print_index(x.length);
System.out.print("val_1 ");
print_value(x);
System.out.print("val_2 ");
print_value(strs);
// 線形探索を実施
fi = linearSearch2(sv, x);
// 結果を表示
System.out.print("val_1 ");
print_value(x);
System.out.print("val_2 ");
print_value(strs);
print_index(x.length);
/* 指示2ここから
- 条件式を適切に補いなさい.
*/
if(fi[0] < 0) {
System.out.println(sv + "は見つかりませんでした");
}
else {
int i = 0;
while(fi[i] >= 0) {
System.out.println(sv + "は" + (fi[i] + 1) + "番目にあります");
System.out.println("対応する文字列は " + strs[fi[i]] + " です");
i++;
}
}
// 指示2ここまで
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正の依頼
Zuishin
2020/06/29 07:54
「わからない」と先生に素直に言いましょう。
m.ts10806
2020/06/29 08:50
まず、teratailで非推奨の投稿をしていることが間違いです
2020/06/30 00:58
複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。