Java初心者です。
Javaで「n番目に大きい値を探索」するプログラムを組みたいのですが、お力を貸してください!
配列データ(10)には各要素に1~10の値が入っています。
ただし配列データをランダムで数値を入れた場合でも動くこと。
ランダムで決めたn番目の値を探索するプログラムです。
----
int[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//配列データの順番はランダムに並び替わります
int n = random.nextInt(data.length) + 1;
for(int range = 0; range < n; range ++) {
//n番目の要素が見つからなかった場合
if(n > data.length) {
System.out.print(n + "番目に大きい要素は見つかりませんでした。");
break;
}
/* 範囲の先頭から最後まで処理を繰り返し、範囲内の最小値が格納
* されている要素を決定する
*/
for(int seach = range + 1; seach < data.length; seach ++) {
//基準値より探索値が小さかった場合
if(data[range] <= data[seach]) {
int swa = data[range];
data[range] = data[seach];
data[seach] = swa;
}
}
//n番目の要素が見つかった場合
if(n -1 == range) {
System.out.print(n + "番目に大きい要素は" + data[range] + "です。");
break;
}
}
----
と言う感じで一度組んでみたのですが、
配列に格納されている値を変更しないようにと言われました。
まず一番大きな値を探し、その値より小さい値を順に探索していけばいいのだと思うのですが、いまいち分かりません。
誰か教えてください。よろしくお願いします。
No.7ベストアンサー
- 回答日時:
難しく考えすぎじゃないですか? 質問者さんが仰るとおり「まず一番大きな値を探し、その値より小さい値を順に探索していけばいい」のだと私も思います(^^;。
「配列の中から最大値を探索する」線形探索問題の次の課題だと思いますが、単純な応用問題ですよ。
「配列の中から最大値を探索する」場合、仮の最大値と配列の要素を比較しますが、そこに、「一番大きな値より小さい」という条件を追加するだけです。
「配列の中からn番目に大きな値を探索する」ときは、この判定条件が「n-1番目に大きな値より小さい」と変化するだけです。
上限値 = 0
for(n回繰り返し)
仮の最大値 = 0
for(配列要素数繰り返し)
if(配列の要素 > 仮の最大値)
if(上限値 == 0)
仮の最大値 = 配列の要素
else if(配列の要素 < 上限値)
仮の最大値 = 配列の要素
上限値 = 仮の最大値
こんな感じ(^^;)
No.5
- 回答日時:
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Nbanme {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
Collections.shuffle(list);
System.out.printf("現在の配列内容[%d",list.get(0));
for ( int i = 1 ; i < list.size() ; i++ ){
System.out.printf(",%d",list.get(i));
}
System.out.println("]");
int num = (int)(Math.random()*10+1);
System.out.printf("%d番目に大きい要素は",num );
System.out.printf("%dです。",list.get(list.indexOf(new Integer(11 - num))));
}
}
ただし、学校の課題とかの場合この回答では○もらえないかと。
何をやっているかどうかは考えてみてください。
この回答への補足
昇順に並んでいる配列から、nを引くとn番目が出ると言う解釈で大丈夫でしょうか?
しかし、配列の内容を変更しない(入れ替えをしないと言うことだと思うのですが)
とのことで、ランダムに並んでしまうとこれは通用しないと思うのですが…。
No.3
- 回答日時:
public static void main( String args[] ) {
int[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = random.nextInt(data.length) + 1;
System.out.print(n + "番目に大きい要素は" + (11 - n) + "です。");
}
この回答への補足
>System.out.print(n + "番目に大きい要素は" + (11 - n) + "です。");
配列の中身は数も順序もランダムになるので、は使えないんです。
No.2
- 回答日時:
多分NGかと思いますが。
import java.util.Arrays;
import java.util.List;
public class Nbanme {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
int num = (int)(Math.random()*10);
System.out.printf("number is:%d",num );
System.out.printf(" / index is:%d",list.indexOf(new Integer(num)));
}
}
こんな方法もある、という一例です。
No.1
- 回答日時:
data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
rank = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
配列データの順序を指し示す配列を設定してみては、いかがでしょう。
まず、data の先頭要素が、最大と仮定し、・・・
rank = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
この先頭要素と、それ以外の 各data 要素とを比較する。
仮に、比較した data要素の方が大きければ、最大要素を設定しなおす。
rank = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0};
これを、data の最終要素までの比較を繰り返し、その時点の最大要素が
結果となります。
rank = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
続いて、2番目に大きな要素を、上記と同様に仮設定を行い、rank 配列が
0 である data 要素との比較を繰り返す。
rank = {2, 0, 0, 0, 0, 0, 0, 0, 0, 1};
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) 格納したデータを配列のように扱う方法はありますか? 8 2023/06/05 08:53
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
プログラミングで二番目に大きい数を表示する
その他(プログラミング・Web制作)
-
n番目に大きい数を求めるアルゴリズム(C言語)
C言語・C++・C#
-
2番目の最大値を求める
C言語・C++・C#
-
-
4
java 配列
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/2】 国民的アニメ『サザエさん』が打ち切りになった理由を教えてください
- ・ちょっと先の未来クイズ第5問
- ・【お題】ヒーローの謝罪会見
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じ文字を探しカウントしたい
-
java StringとString[]の違い
-
java
-
配列の中に複数存在する数がい...
-
『args[]』とは?
-
無名配列の作成方法について質問
-
C#の質問
-
IF関数でEmpty値を設定する方法。
-
干支の計算で。。。
-
DateTimePickerに値を入れたい...
-
ボタンの複数割り当てについて
-
配列にnullを代入すると、null...
-
全角英数字とハイフンを半角に...
-
char型での演算子
-
Excel VBAで配列の途中から(X)M...
-
javaのエラーの意味がわかりま...
-
実数からの小数部の取得
-
Java 九九の表について
-
Formの値が変更されたかどうか...
-
java初心者の質問(3つの整数の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[Ljava.lang.Stringってなんですか
-
この警告はどうすれば?
-
Javaで文字と数字が混ざったも...
-
配列の中に複数存在する数がい...
-
main(String[] args) の args...
-
【C#】ハッシュテーブル(連想...
-
javaで大容量テキストファイル...
-
C#で動的配列Listの中身をListB...
-
C言語でunsigned char配列を連...
-
javamailで複数人にメールを送...
-
配列で、値の入っている要素数...
-
同じ配列またはクラスを、2回...
-
【Ajax通信&Java】配列の受け取...
-
java StringとString[]の違い
-
『args[]』とは?
-
質問です。 配列が100以上の場...
-
JavaのBase64デコードで正しく...
-
JavaBeansの配列の値取得方法に...
-
sqlparamaterでIN句を使いたい。
-
ページング
おすすめ情報