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

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

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

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

Q&A

0回答

1561閲覧

初心者です。難易度高くて解けません。わかる方よろしくお願いします。

omuretu

総合スコア1

Java

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

0グッド

2クリップ

投稿2020/06/28 22:51

import java.util.Random;
import java.util.Scanner;

public class MyClass {

// 乱数を全体で共有 static Random rnd; // 整数の単調増加配列を作成(増分0-2) static int[] make_ints_s(int n) { int[] x = new int[n]; int sum = 0; for(int i = 0; i < n; i++) { sum += (int)(Math.pow(rnd.nextDouble(), 2) * 3); x[i] = sum; } 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ここから * 探索値がデータ列中に複数あっても全てを列挙できるよう * メソッド binarySearch2() を修正しなさい. */ static int[] binarySearch2(int sv, int[] x) { int cnt = 1; int[] fi = new int[x.length+1]; int li = 0; int ri = x.length - 1; while(li <= ri) { // 左端と右端が入れ替わったら終了 int i = (int)((li + ri) / 2); System.out.printf("[%03d] ", cnt++); print_presp(i); if(x[i] == sv) { // 発見したら System.out.println("++ "); while() { System.out.printf("[%03d] ", cnt++); print_presp(i); System.out.println("++ "); } break; } else { System.out.println("-- "); } if(x[i] < sv){ li = i + 1; // 右に絞る } else { ri = i - 1; // 左に絞る } } 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_s(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 = binarySearch2(sv, x); // 結果を表示 System.out.print("val_1 "); print_value(x); System.out.print("val_2 "); print_value(strs); print_index(x.length); /* 指示2ここから * 条件式を適切に補いなさい. */ if() { System.out.println(sv + "は見つかりませんでした"); } else { int i = 0; while(fi[i] >= 0) { System.out.println(sv + "は" + fi[i] + "番目にあります"); System.out.println("対応する文字列は " + strs[fi[i]] + " です"); i++; } } // 指示2ここまで }

}

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

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

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

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

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

Zuishin

2020/06/28 22:53

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

2020/06/28 22:54

タイトルに情報がありません。 コードはコードブロック記法で読みやすいようにしましょう。 なにより、質問がどこにも書いてありません。 https://teratail.com/help/question-tips には一通り目を通しましょう。
m.ts10806

2020/06/28 23:18

一個ずつ読んでいけばさほど難しいことは書いてないですよ。
sazi

2020/06/29 00:18

解ける事より自分で考える事が一番大事。 脳の訓練は本人の意思だけが頼りなので、悩めば悩むほど良いってもんです。
退会済みユーザー

退会済みユーザー

2020/06/29 00:31

あなたが何がわからないのかわかりません(w
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問