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

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

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

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

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Q&A

2回答

776閲覧

javaでバブルソートを用いてソートをするプログラムですがうまく動きません。

Kurokura

総合スコア5

Java

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

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

0グッド

0クリップ

投稿2020/04/19 13:46

編集2020/04/19 13:49

配列productを読み取り、商品の売上が多い順にソートするプログラムを作成しております。

実行結果は、売上た個数 売上た商品名、とします。
このプログラムだと、実行結果が
3 bread
3 butter
3 onion
2 carrot
2 potato
2 rice
2 tea
1 water
となる予定です。

しかし、実行結果がうまくいきません。以下、ソースコードです。

java

1class Count{ 2 int i, j, k, length; 3 boolean hantei = false; 4 String p_name_data[] = new String[100]; 5 int p_num_data[] = new int[100]; 6 String add_name_data[] = new String[1]; 7 int add_num_data[] = new int[1]; 8 9 void count(String[][] product){ 10 for(i=0; i<100;i++){ 11 p_name_data[i] = ""; 12 p_num_data[i] = 0; 13 } 14 add_name_data[0] = ""; 15 add_num_data[0] = 1; 16 length = 1; 17 18 for(i = 0; i < product.length; i++){ 19 for(j = 0; j < product[i].length; j++){ 20 hantei = false; 21 for(k = 0; k < length; k++){ 22 if(p_name_data[k] == product[i][j]){ 23 p_num_data[k]++; 24 hantei = true; 25 continue; 26 } 27 else hantei = false; 28 } 29 if(hantei == false){ 30 add_name_data[0] = product[i][j]; 31 System.arraycopy(add_name_data, 0, p_name_data, length-1, 1); 32 System.arraycopy(add_num_data, 0, p_num_data, length-1, 1); 33 length++; 34 } 35 else{} 36 } 37 } 38 } 39 40 int num; 41 String name; 42 void sort(){ 43 int new_num_data[] = new int[length]; 44 String new_name_data[] = new String[length]; 45 for(i = p_num_data.length-1; i > 0; i--){ 46 for(j=0; j<i; j++){ 47 if(p_num_data[j] < p_num_data[j+1]){ 48 num = p_num_data[j]; 49 name = p_name_data[j]; 50 51 p_num_data[j] = p_num_data[j+1]; 52 p_name_data[j] = p_name_data[j+1]; 53 54 p_num_data[j+1] = num; 55 p_name_data[j+1] = name; 56 } 57 } 58 } 59 for(i=0; i<length; i++){ 60 new_num_data[i] = p_num_data[i]; 61 new_name_data[i] = p_name_data[i]; 62 } 63 for(i=0; i<length; i++){ 64 System.out.println(new_num_data[i]+" "+new_name_data[i]); 65 } 66 } 67} 68 69class Ex1{ 70 public static void main(String[] args){ 71 String[][] product = { 72 {"tea", "butter", "bread"}, 73 {"butter", "bread"}, 74 {"onion", "carrot", "potato"}, 75 {"rice", "onion"}, 76 {"bread", "tea", "butter"}, 77 {"water", "onion", "carrot", "potato", "rice"} 78 }; 79 80 Count A1 = new Count(); 81 A1.count(product); 82 A1.sort(); 83 } 84}

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

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

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

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

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

jimbe

2020/04/19 14:08 編集

> 実行結果がうまくいきません 現状どうなってしまうのでしょうか. ご質問はソートがうまくいかないかのように読めますが, ご提示のコードは集計してソートしています. どの辺りがうまくいっていないのかはどこまで確認されていますでしょうか.
Kurokura

2020/04/19 14:14

実行結果は 3 butter 3 bread 3 onion 2 tea 2 butter 2 bread 2 carrot 2 potato 2 rice 2 onion 1 bread 1 tea 1 butter 1 water 1 onion 1 carrot 1 potato 1 rice 0 となっております。 多分、count()内のforループに異常があると思われます。
m.ts10806

2020/04/19 14:33

そちらの結果も質問本文に追記してください。
guest

回答2

0

java

1 if(p_name_data[k] == product[i][j])

Stringを==で比較判定してはいけません。

それから、「うまくいきません」では伝わらないので、何がどううまくいかないのかを説明するようにしてください。
こういうエラーが出るとか、こうなってほしいのに実際はこうなる、など。

投稿2020/04/19 14:09

swordone

総合スコア20669

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

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

0

さっと見では3つ問題があるように思います.

  1. 文字列比較

swordone さんが回答されています通り, "同じ文字列か" の判定に == は使わないほうが良いと思います.

  1. continue

ご提示のコードに唯一ある continue ですが, break の間違いでは無いでしょうか.

  1. System.arraycopy

何をされようとしているのか, 新しい name を配列の先頭に入れるのであれば 先に arraycopy してから入れると思いますし, パラメータ順を間違えているようにも思えますし, num は入れていませんし...

投稿2020/04/19 14:45

編集2020/04/19 14:58
jimbe

総合スコア13209

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問