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

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

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

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

Q&A

解決済

2回答

4049閲覧

ArrayList内の数値を最小値順に順位付けしたい

bluescat

総合スコア16

Java

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

0グッド

0クリップ

投稿2016/08/04 02:51

いつもお世話になっております。

maisuというArrayListに、順不同な数値を格納しておき、
それを最小値順に順位付けしたいです。
たとえば、3,9,6,4なら、1,4,3,2といった感じです。

以下、作りかけのものです。

java

1 ArrayList maisu = new ArrayList(); 2 maisu.add(3); 3 maisu.add(9); 4 maisu.add(6); 5 maisu.add(4); 6 7 int maisuCnt = 1; 8 // 最小値格納用 9 int min = 0; 10 // 最小値Index 11 int minIdx = 0; 12 Integer objInt; 13 for (int i = 0; i < maisu.size(); i++) { 14 if (maisu.get(i) == "") { 15 continue; 16 } 17 objInt = Integer.parseInt((String)maisu.get(i)); 18 if (i == 0) { 19 min = objInt; 20 continue; 21 } 22 for (int j = i; j < maisu.size(); j++) { 23 if (maisu.get(j) == "") { 24 continue; 25 } 26 objInt = Integer.parseInt((String)maisu.get(j)); 27 if (objInt < min && objInt > maisuCnt) { 28 min = objInt; 29 minIdx = j; 30 } 31 } 32 // 最小値を更新 33 maisu.set(minIdx, String.valueOf(maisuCnt)); 34 maisuCnt += 1; 35 }

よろしくお願いいたします。

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

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

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

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

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

ozwk

2016/08/04 02:53

何に困っているんですか?
bluescat

2016/08/04 02:57

自分でロジックを考えて作ってみたのですが、上手くいかないので、 順位付けの方法のアドバイスなど、ご教示いただけますと幸いです。
ozwk

2016/08/04 03:02

同率順位はどうしますか?
bluescat

2016/08/04 03:04

同率は存在しないものとします。
guest

回答2

0

順位付け用のリストをもう一つ用意し、そっちをソートして元のリストと照らし合わせる、という方法はだめですか?

投稿2016/08/04 04:05

swordone

総合スコア20649

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

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

0

ベストアンサー

ArrayListに整数を入れ、maisu.add(3);
取り出し、maisu.get(i)
文字列にキャストしようとして、(String)maisu.get(i) (<-キャスト不可能なのでエラー)
それを整数に変換するInteger.parseInt((String)maisu.get(i))

という無意味に複雑なことやっていますが、
数値で入れたなら数値で取り出しましょう。

もっと言うならArrayListではなくArrayList<Integer>を使いましょう。
getで一々キャストする必要がなくなります。

で、アルゴリズムですが、とくに特別なものでもないので調べれば出てきます。
簡単には、各要素を全要素と比べて、自分より小さい要素が何個あるか数えて
その数+1がその要素の順位です。

投稿2016/08/04 03:30

ozwk

総合スコア13512

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

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

bluescat

2016/08/04 04:48

ありがとうございます。 解消しました。 ArrayList<Integer> maisu = new ArrayList<Integer>(); Integer rankVal; for (int i = 0; i < maisu.size(); i++) { rankVal = 1; for (int j = 0; j < maisu.size(); j++) { if (maisu.get(i) > maisu.get(j)) { rankVal += 1; } } maisu.set(i, rankVal); }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問