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

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

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

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

Q&A

解決済

3回答

1357閲覧

バブルソート?の実装ができない

hood

総合スコア351

Java

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

0グッド

0クリップ

投稿2018/07/24 13:38

編集2018/07/24 13:39

###バブルソート?の実装ができない
題目通りです。
私はノベルゲームを作っています。
しかし、いわゆるログ画面の構築において、「物語中のテキストを表示する」部分で詰まりました。

「物語中のテキストを表示する」というのは、つまり「ある時点一文」から順番に「指定の範囲まで遡った一文」までの文を順繰りにとってきて、整列させ、表示することです。しかし、その一文一文が意図したものと逆順になってしまうのが問題点です。そこでバブルソートが必要なのかな?と思いました。しかし失敗しました。

以下にコードを記します。
テキストの処理は省略し、必要な変数の処理のところだけ書きました。
何がしたいかの説明は、コメント中に書いておきます。
そのほうがここで書くより分かりやすくなると思ったので・・・

バブルソートの試みをしていない、元のコード

lang

1//途中で出てくるint型のnumはゲームプレイヤーがボタンを押すと1ずつ上がる仕組みになっている。 2//ここでは仮に3が入るとする。 3 int [] label = new int[5]; 4 5 for(int m=0;m<5&&m<=num;m++){//「m<5」は遡れる範囲が5であることを示す 6                  //「m<=num」は5になるときまで、遡れる範囲がnumであることを示す。 7 label[m] = num - m;//例えばnumが3だとする。するとlabel[0]に3が入ってしまう。 8 //そうではなくlabel[0]に0、label[3]に3をというふうに入れたい。 9 //よってバブルソートが必要となると思った 10 11}

一応バブルソートの試みをして、失敗したコードも乗せておきます・・・

lang

1int [] label = new int[5];//上記のコードと一緒 2 3 for(int m=0;m<5&&m<=num;m++){ 4 label[m] = num - m; 5        //試したバブルソート 6 if (m!=0&&label[m-1]>label[m]) {//m!=0はmが0のときm-1がマイナスになるのを防ぐため 7 for (int t = 0; t <= num; t++) { 8 hozon=label[m-1]; 9 label[m-1]=label[m]; 10 label[m]=hozon; 11 } 12 } 1314//これをやると、同じテキストが表示されるようになりました・・・

あまり上手く説明できず、申し訳ありません。
情けない話ですが、どうやら私は数学的思考力に乏しいみたく、どうしても思った通り変数を整列させられませんでした・・・

最後にもう一度今回の質問の要約をします。
「どうすればlabel[0]に0、label[1]に1・・・label[3]に3というふうに変数を整列させることができるのか?」です・・・・
どうかご助力お願いいたします・・・!

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

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

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

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

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

guest

回答3

0

二つのfor文に分けることで目的を達成しました。
具体的には以下のコードです・・・

java

1for(m=0;m<=num&&m<=4;m++) { 2 label[4 - m] = num- m; 3 } 4 5 for(t=0;t<=num&&t<5;t++){ 6 str[4-m+1+t] = String.valueOf(label[4-m+1+t]); 7 }

投稿2018/07/25 12:03

hood

総合スコア351

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

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

0

意図している事が全く分からなくて申し訳ないですが、、、、

if (m!=0&&label[m-1]>label[m]) {

これは、最初の for(int m=0;m<5&&m<=num;m++){ の中なので、labelの配列が全て埋まっていません。ここで、この判定と、次の for (int t = 0; t <= num; t++) { は不適切な結果にしかなりません。
まず、最初の for()で、 配列label[]に値を設定してから、中身の入れ替えをすべきです。

分かる範囲で、参考までに。

投稿2018/07/24 14:06

pepperleaf

総合スコア6383

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

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

hood

2018/07/24 22:18

回答ありがとうございます! そうですよね、まず、値を設定してから整列させたほうがいいですよね・・・あの情報の中から的確なアドバイスありがとうございました・・・二つのfor文に分けるというのをやってみたいと思います・・・
guest

0

自己解決

なんとか解決できました、.....
ありがとうございます

投稿2018/07/25 06:57

hood

総合スコア351

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

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

pepperleaf

2018/07/25 10:16

解決して良かったです。 こちらでも良いですが、解決済みをマークして頂き、どう解決したか、記載されると後から見る人が参考になると思います。
hood

2018/07/25 12:04

そうですね!ご指摘ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問