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

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

ただいまの
回答率

90.53%

  • Java

    13747questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 143

hood

score 38

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

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

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

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

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

//途中で出てくるint型のnumはゲームプレイヤーがボタンを押すと1ずつ上がる仕組みになっている。
//ここでは仮に3が入るとする。
 int [] label = new int[5];

   for(int m=0;m<5&&m<=num;m++){//「m<5」は遡れる範囲が5であることを示す
                  //「m<=num」は5になるときまで、遡れる範囲がnumであることを示す。
            label[m] = num - m;//例えばnumが3だとする。するとlabel[0]に3が入ってしまう。
                             //そうではなくlabel[0]に0、label[3]に3をというふうに入れたい。
                             //よってバブルソートが必要となると思った

}


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

int [] label = new int[5];//上記のコードと一緒

  for(int m=0;m<5&&m<=num;m++){
            label[m] = num - m;
        //試したバブルソート
             if (m!=0&&label[m-1]>label[m]) {//m!=0はmが0のときm-1がマイナスになるのを防ぐため
                for (int t = 0; t <= num; t++) {
                hozon=label[m-1];
                label[m-1]=label[m];
                label[m]=hozon;
                }
            }
}
//これをやると、同じテキストが表示されるようになりました・・・

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

+1

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

  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/25 07:18

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

    キャンセル

+1

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

for(m=0;m<=num&&m<=4;m++) {
               label[4 - m] = num- m;
        }

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

check解決した方法

-1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/25 19:16

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

    キャンセル

  • 2018/07/25 21:04

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

    キャンセル

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

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

関連した質問

  • 解決済

    javaでデータを読み込んでソートしたいのですがうまく来ません

    コンパイルするとエラーになって 「シンボルが見つかりません」と表示されます。 他にも問題があれば教えてください import java.io.File; import

  • 解決済

    クエリストリングの利用「Java」

    前提・実現したいこと クエリストリングを利用して、以下の処理を実現したいです。 スーパーのレジでレシートを作る仕組みを作成します。 クエリストリングで総額・個数・商品種別

  • 解決済

    Javaメソッド

    引数で指定した数だけ草を生やして文字列として返す関数 kusa を作成する 以下のコードをもっと素直に書く方法としてはどんなものがあるのか知りたいです よろしくお願いします

  • 受付中

    java itemlisetenerの質問

    itemlistenerの部分で質問です 表示がうまくいきません import java.awt.Color; import java.awt.GridLayout; im

  • 解決済

    Java初心者・複数行の標準入力と配列について

    問題点・テーマ マークテストの正解の番号の列を入力させ、其の後に受験者数を入力する。 そしてそれぞれの回答番号を入力する。 そのときのそれぞれの点数(=正解数)を求めるプログラムを

  • 解決済

    ワニワニパニックをjavaで作りたいのですがうまくできません。お助けください。

    前提・実現したいこと スタートボタンによりゲームを開始、ゲーム終了後にスタート画面に戻る。 ワニの出る位置を固定したい。 1分間でゲーム終了。 得点のランキング付け。 発生して

  • 解決済

    for文の中にある最大値の取得方法

    前提・実現したいこと 某サイト内で出されている問題について 「forループを用いて、1から100までの乱数を5回発生させ、表示し、終了後その中の最大値を表示しなさい。」 という問題

  • 解決済

    乱数から奇数・偶数を取り出したい

    整数型の配列変数dataを作成し、初期値は大きさ:10,値:1から100の乱数が入ります. 以下の回答のように、値をすべて表示し、その中の偶数の数と、奇数の数を表示したいです.

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

  • Java

    13747questions

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