質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.22%

学校の課題で、どこが間違えているのかわかりません。

受付中

回答 0

投稿

  • 評価
  • クリップ 2
  • VIEW 653

omuretu

score 1

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • Zuishin

    2020/06/29 07:54

    「わからない」と先生に素直に言いましょう。

    キャンセル

  • m.ts10806

    2020/06/29 08:50

    まず、teratailで非推奨の投稿をしていることが間違いです

    キャンセル

  • 退会済みユーザー

    2020/06/30 00:58

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る