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

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

詳細はこちら
Java

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

Q&A

解決済

2回答

3501閲覧

ArrayListをforの中で分割したい

sakuta777

総合スコア10

Java

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

0グッド

0クリップ

投稿2019/11/22 05:59

前提条件として

ArrayList<String> a = new ArrayList<>();
定義しており、その中に

1 2
3 4
5 6
7 8

といった値が入っています。これを配列にしたいと思い、
String b = a.get(0);
String[] c =b.split(" ");
System.out.println(c[0]);
とし、これで1つ1つは分割できると分かりました。

次に

一行一行を
[1,2]
[3,4]
[5,6]
[7,8]

上記のような配列にしたいと思い、

String[] d;
for(int k = 0; k < a.size(); k++){
d[k] = a.add(k).split(" ");
}

としたのですが、
error: incompatible types: int cannot be converted to String
というエラーが出てしまい、調べたたのですが、情報が少ない上よく分かりませんでした。

思い当たる節としては、list aを二次元配列にしないといけないかなとも思っているのですが、
詳しくは分かりません。

list aを

 [1,2]
[3,4]
[5,6]
[7,8]

上記のような形にするにはどうすればよいかアドバイスをいただきたいです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

addメソッドは追加です。
a.add(引数) ← これだとaの配列の後ろに引数を追加するだけです
で、splitで分割した結果をd配列のk番目に入れてます。
投稿者さんのしたい事はaの配列を[[a,b],[c,d],[e,f]]の二次元配列に
変換したいんですよね?

Java

1 2int row = a.size(); 3String[][] d = new String[row][2]; 4for ( int i = 0; i < row; i++ ) { 5 String[] temp = new String[2]; 6 temp = a.get(i).split(" "); 7 d[i][0] = temp[0]; 8 d[i][1] = temp[1]; 9} 10

こんな感じ?
コンパイルも何もしてないのでダメかも?

投稿2019/11/22 07:02

NEO_PLANETT-777

総合スコア333

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

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

sakuta777

2019/11/22 07:19

はいaに入っている空白区切りの2つの数字の列をを二次元配列にしたいと 思っています。
sakuta777

2019/11/22 07:30

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1が出ました。
NEO_PLANETT-777

2019/11/22 07:43

それはインデックスが無いエラーです。 splitした結果、2個ではなく1個のやつがいませんか? それだと、配列の番号しているので、存在しない配列番号を 指定してエラーが起きます。
NEO_PLANETT-777

2019/11/22 08:12

投稿者様で、存在チェック等の制御を追加されてみて下さい。 私は値が確実に2個づつ存在しているという観点で書いてます。
sakuta777

2019/11/22 09:12

すいません。 数値が2個ずつでなかったためエラーが出てたみたいです。 ありがとうございました。
LouiS0616

2019/11/22 10:39

ループの中は d[i] = a.get(i).split(" "); だけで書けませんか?
NEO_PLANETT-777

2019/11/25 02:37

一応判り易く、別配列に入れてみました。 直接入れる方が良いですけどね。 初心者さんみたいなので、こちらの方が判り易いかな?と…
LouiS0616

2019/11/25 02:58 編集

@NEO_PLANETT-777 さん なるほど、意図があってそのように書いていたのですね。 個人の感じ方の差異・話し手と聞き手の相性もあると思いますので、NEO_PLANETT-777さんの回答を尊重します。 ただ前言を翻すようで恐縮なのですが、temp を new String[2] で初期化する部分は完全に無駄な処理になってしまっているので省いた方が良かったように思います。
NEO_PLANETT-777

2019/11/25 09:05

> LouiS0616 様 仰る通りですね。 ご指摘有難うございます。
guest

0

a.add(k)の引数は文字列のはずなのにintを渡してるというエラーです
そこらへんかんがえなおしてみては

投稿2019/11/22 06:10

y_waiwai

総合スコア88038

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

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

sakuta777

2019/11/22 06:18

確かにkが数値型でaが文字列型でした。 int型をaddするためには、分割処理前にaを数値型に直すことにしてみます。
y_waiwai

2019/11/22 06:23

a は文字列のリスト、ですね。 んで、 a.add(k)の返り値は「文字列ではない」ので、.split(" ");ってのはできませんし、 d[k] に代入もできません。 そこらへん難しいでしょうけど、がんばってください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問