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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

0回答

672閲覧

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

omuretu

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

2クリップ

投稿2020/06/28 22:45

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ここまで
}

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/06/28 22:54

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

2020/06/28 23:50

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問