🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

解決済

1回答

537閲覧

ArrayListから配列への変換。どなた様かご教授ください!!(+_+)

iBETA

総合スコア43

Java

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

0グッド

1クリップ

投稿2021/01/21 09:47

まずは、10件の数値を sources0[]に代入
一文字目の数字をみて、1~9の数値毎 ArrayListに追加(10回)
その後、int型二次元配列にしたく、変換作業をするがどうしても変換されず。
ネットでいろいろ調べたがどうしてもできませんでした。
どなた様かどうかご教授ください。よろしくお願いいたします。

エラー内容は、
Type mismatch: cannot convert from Object[] to int[]
になります。

Java

1import java.util.ArrayList; 2import java.util.Random; 3 4public class ArraySort { 5 6 static final int NUMBERS = 10; 7 public static void main(String args[]) { 8 9 // sources0 の初期化と生成代入 10 int[] sources0 = new int[NUMBERS]; 11 for (int x = 0; x < NUMBERS; x++) { 12 sources0[x] = (int)(Math.random() * Integer.MAX_VALUE); 13 } 14 15 // sources1 の初期化 16 ArrayList[] sources1 = new ArrayList[10]; 17 for (int x = 1; x <= 9; x++) { 18 sources1[x] = new ArrayList<Integer>(); 19 } 20 21 // 一番左側の数値を取得して、9個のArrayListそれぞれに追加する 22 for (int x: sources0) { 23 sources1[Integer.valueOf(String.valueOf(x).substring(0, 1))].add(x); 24 } 25 26 // sources2 の初期化、それぞれを配列に変換 27 int[][] sources2 = new int[10][]; 28 for (int x = 1; x <= 9; x++) { 29 sources2[x] = new int[sources1[x].size()]; 30 sources2[x] = sources1[x].toArray(new String[sources1[x].size()]); 31 } 32 33 } 34 35}

補足情報

Java11

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

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

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

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

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

dodox86

2021/01/21 09:57

> まずは、10件の数値を sources0[]に代入 > 一文字目の数字をみて、1~9の数値毎 ArrayListに追加(10回) > その後、int型二次元配列にしたく、変換作業をするがどうしても変換されず。 どのような値の入力をして、結果的にどのような2次元配列にしたいのか、具体的な値で説明してください。(1文字目の数字って何?) 今の説明だと正直、判然としません。
iBETA

2021/01/21 10:26

dodox86さんへ どのような値の入力をして、結果的にどのような2次元配列にしたいのか、 具体的な値で説明してください。 とありましたが、コードをちゃんと読めば理解できると思いますが。。。 m.ts10806さんへ エラーの内容はわかってはいるつもりです。 なのでどう書けばいいか質問したまでです。 お二人方へ そういうコメントは、ある意味ではありがたいのでしょうが、 以下、momon-gaさんのような明確な回答を記していただけるわけでもないのに 点数かせぎをする為なのかはわかりませんが、やめたほうがいいと思います。
m.ts10806

2021/01/21 10:29

ここは回答欄ではなく「質問への追記修正」のコメント欄です。 いくら書いても一切スコアに影響しません。 「書いてないことは分からないから、ちゃんと書いてね」と依頼してるだけですよ。
iBETA

2021/01/21 12:57

そういうことは明確な回答を書いてからにして下さい。 質問の内容がわからないのであれば 質問に質問が返ってくるのもわかりますが m.ts10806さんが書いてきた内容は、 そう言った質問の内容がわからない等な内容ではありません。 エラーが何を指摘しているのか!?等ではなく 以下回答者のような明確な回答を書いてきてはいかがでしょう 実際、以下回答者はなんの質問等なく普通に答えを返してくれています。 m.ts10806さんのような質問なんて一つもしてきてないですよ!?
dodox86

2021/01/21 13:14

@iBETAさん m.ts10806さんの[2021/01/21 19:29]のコメント: > 「書いてないことは分からないから、ちゃんと書いてね」と依頼してるだけですよ。 は、恐らくは主に私のコメント、指摘事項についていただいたフォローだと思います。
m.ts10806

2021/01/21 21:49

momon-gaさんも「やりたいことは置いておき」と要件不明瞭であることを認めつつの回答です。 >そういうことは明確な回答を書いてからにして下さい。 要件不明瞭および「何を調べ何を試したのか」が明確に記載されていないのは 「推奨していない質問」にあたります。 https://teratail.com/help/avoid-asking 明確な回答をするために追記を求めているのですが、 あなたの質問は人に何かを指摘できるほど十分な内容と言えるでしょうか。 読むのは赤の他人です。 「調べた」「うまくいかない」で伝わる情報量はゼロです。厳しい言い方するとノイズです。 https://teratail.com/help/question-tips コピペで動くコードを求めるのは質問ではなく作業依頼です。 いただいた回答のコードを半分も理解できてないなら 同じように丸投げを繰り返し他人の時間を浪費することになります。 質問内容とコメントから、「もらったコードで動いた、やった」程度で済んでるのは見えます。 「回答を理解できたか」伝えてくださいね。 https://teratail.com/help/question-tips#questionTips4-2 「厚意で成り立っている場」ということは自覚されたほうが良いです。 指摘しないと、それを明示しないと伝わらないのは当然なので指摘しているわけですけど、 指摘したら指摘したで、自分の主張だけしていくとか、この場には合わないと思います。 お金しっかり使って家庭教師なりメンターなり雇った方が望めるのでは。 「厚意の場である」「サイトの利用ルールが明文されている」「回答者はスコア貯めたところで何の報酬もない」場です。 自分が欲しいものだけ求める前に、サイトの利用ルールくらい確認されてはいかがでしょうか。 同じようなスタイルを続ける限り、手を差し伸べる人が減ってくだけに思います。
m.ts10806

2021/01/21 21:55

もうちょっと端的に言うと 「その場しのぎの回答は(内容次第だが)すぐにできる。全体の流れや要件次第ではその場しのぎにしかならず望ましい対応にならない」 ことを防ぐためのこのコメント欄です。 結構あるんですよ。その場しのぎの回答によって解決したと思ったら、結局ツギハギになってしまって望ましい実装にならず同じような質問を繰り返すことになることって。 回答者はそのあたりよく知っているのでこのコメント欄で要件を具体的にしていっています。
iBETA

2021/01/22 05:50 編集

少なくとも僕が書いた内容を明確に回答してくれてる方がいます。 その時点で、m.ts10806さんが何をおっしゃろうと、 質問に対する答えを書いていない以上、そこには全く説得力はありません。 残念です。もうこの話しは終わりにしましょう。。。 時間の無駄です。。。レス不要でお願いいたします。
guest

回答1

0

ベストアンサー

とりあえず。やりたいことは置いておき・・・
コンパイルエラーの箇所 < Type mismatch: cannot convert from Object[] to int[]

に、関しては以下でいけるかと。

java

1sources2[x] = ((ArrayList<Integer>)sources1[x]).stream().mapToInt(i -> i).toArray();

投稿2021/01/21 10:13

momon-ga

総合スコア4826

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

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

iBETA

2021/01/21 10:19

ありがとうございました!! たすかりました。
iBETA

2021/01/23 04:16

momon-ga さんへ 改めまして、回答していただいたことに感謝します。 momon-ga さんに教えていただいた上1行に変更しましたところ 無事動作致しました。。。 しかしながら、僕の書くプログラムがまず間違いなくくずなせいで 処理完了速度が目標速度にほど遠い結果となってしまいました。 やりたいことは、 1、数値の生成代入   (僕が上に書きましたコードでは、10件分のintになります。) 2、それを複数の配列に分割する   分け方は、一番はじめ(左側)の数値で分けたい   故に、分けた後の配列の数はゼロを除いた9つになると思います。   sources1[1] 〜 sources1[9] その他 「// sources1 の初期化」 では、10(NUMBERS)で初期化してますが for で回す(1〜9)際に、わかりやすく数を合わせた次第です。 故に、sources1[0] は、使っていません。 ArrayListを使った理由は、配列ですとadd的なことができない!?ので それしか思いつかず使いました。 感想 sources2[x] = ((ArrayList<Integer>)sources1[x]).stream().mapToInt(i -> i).toArray(); を見て思ったこと。。。正直に申し上げますが、やば!って思いました。 僕の頭では到達することは出来ないなと。。。 型変換された!?変数を、stream()、mapToInt()、toArray()... stream()使うんだ〜なんか見たことあるな〜 (i -> i) !?アロー関数!?ラムダ!?ってこと!? 僕はそもそもWEBアプリの開発者でして、普段は、 JavaScript, React 系しか使っていません。 アルゴリズム関連などはそもそもやったことがなく Java言語は、実は今回が 初になります。 本題に入ります!! 1、生成代入 2、配列分割 というプロセスはそのままで、もう少し早い速度で 実行することは不可能でしょうか。。。 1番と2番は、明確に分けたいです。 前提は、最終的に、int 型の配列になれば問題ありません。 momon-gaさんへ こんな僕ですが、どうかご教授ください。よろしくお願い申し上げます。m(_ _)m
iBETA

2021/01/23 04:19

因みにですが、通常は100万件の数値で計測していまして、 僕のCPUでは、300ちょっとmsとかです。
momon-ga

2021/01/25 01:18

問題をそもそも読んでないですが・・・ まずは、別の質問たてるところから始めてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問