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

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

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

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

3回答

5099閲覧

Java ArrayListを引数して複数のArrayListでreturnしたい

Mu-LINE

総合スコア10

Java

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2019/06/20 02:39

前提・実現したいこと

 言語はJavaです。
versionは1.8.0です。

 実行環境はテキストエディタ、IDEは使用していません。

 実現したいことは
mainメソッドからArrayListを関数に引数して、別メソッドで処理した複数の値をreturnでmainメソッドに返したいです。int、Stringで複数の値を返す方法は可能でしたが、ArrayListで同じように書いたところ、エラーが発生しました。
ArrayListという型自体の問題なのか、コードの記述がおかしいのか、エラーからは判断ができず、どのように解決すればいいのかがわかりません。
現在試している方法でなくても、ArrayListの値を複数返す方法があればご教授いただけると幸いです。

発生している問題・エラーメッセージ

Arai.java:32: エラー: addに適切なメソッドが見つかりません(ArrayList<String>) nano.uso.add(kemono); ^ メソッド Collection.add(String)は使用できません (引数の不一致: ArrayList<String>をStringに変換できません:) メソッド List.add(String)は使用できません (引数の不一致: ArrayList<String>をStringに変換できません:) メソッド AbstractCollection.add(String)は使用できません (引数の不一致: ArrayList<String>をStringに変換できません:) メソッド AbstractList.add(String)は使用できません (引数の不一致: ArrayList<String>をStringに変換できません:) メソッド ArrayList.add(String)は使用できません (引数の不一致: ArrayList<String>をStringに変換できません:) Arai.java:34: エラー: addに適切なメソッドが見つかりません(ArrayList<String>) nano.honto.add(friends); ^ メソッド Collection.add(String)は使用できません (引数の不一致: ArrayList<String>をStringに変換できません:) メソッド List.add(String)は使用できません (引数の不一致: ArrayList<String>をStringに変換できません:) メソッド AbstractCollection.add(String)は使用できません (引数の不一致: ArrayList<String>をStringに変換できません:) メソッド AbstractList.add(String)は使用できません (引数の不一致: ArrayList<String>をStringに変換できません:) メソッド ArrayList.add(String)は使用できません (引数の不一致: ArrayList<String>をStringに変換できません:) 注意:一部のメッセージは簡略化されています。-Xdiags:verboseで再コンパイルして完全な出力を取得してください エラー2個

該当のソースコード

Arai.java

1import java.util.ArrayList; 2 3public class Arai{ 4 public static void main(String[] args){ 5  // Nanoda classのインスタンスの作成 6 Nanoda nano = new Nanoda(); 7   8  // 引数したい値のインスタンスの作成 9 ArrayList<String> kemono = new ArrayList<String>(); 10 ArrayList<String> friends = new ArrayList<String>(); 11   12  // 値に要素を追加 13 kemono.add("けもの"); 14 friends.add("フレンズ"); 15 16  // 変数kemohureにNanoda classのtomodachiメソッドの処理を引数して代入 17 Nanoda kemohure = nano.tomodachi(kemono, friends); 18 19 kemohure.uso.get(0); 20 kemohure.uso.get(1); 21 22 kemohure.honto.get(0); 23 kemohure.honto.get(1); 24 25 System.out.println(kemohure.uso); 26 System.out.println(kemohure.honto); 27 28 } 29} 30 31 32class Nanoda{ 33 // 返したい値のインスタンスの作成 34 ArrayList<String> uso = new ArrayList<String>(); 35 ArrayList<String> honto = new ArrayList<String>(); 36 37 public Nanoda tomodachi(ArrayList<String> kemono, ArrayList<String> friends){ 38 39  // classのインスタンスの作成 40 Nanoda nano = new Nanoda(); 41 42  // Nanoda classのそれぞれの変数フィールドに、引数した要素 + 新しい要素を 43  // 追加 44 nano.uso.add(kemono); 45 nano.uso.add("kemono"); 46 nano.honto.add(friends); 47 nano.honto.add("friends"); 48 49 50  // Nanoda classを返す 51 return nano; 52 53 } 54} 55 56// つかっている変数一覧(処理順) 57// nano : Nanoda classのインスタンス変数 58// kemono : "けもの" が入っているString型ArrayList 59// friends : "フレンズ" が入っているString型ArrayList 60// uso : ArrayList変数[kemono]の値を返すために要素を代入する変数 61// honto : ArrayList変数[friends]の値を返すために要素を代入する変数 62// kemohure : Nanoda classのtomodachi関数を呼び出すための変数

試したこと

・ArrayListをasListでList型配列に変換して返してみる。
→ 失敗。下記のエラーが発生しました。

※今後別処理でaddやremoveもできるようにしたいので、毎回toArrayとasListで変換してから処理をすることになるので、できれば変換なく対応できる方法だとありがたいです。

Arai.java:38: エラー: ';'がありません List<String> nano.uso = Arrays.asList(nano.uso); ^ Arai.java:39: エラー: ';'がありません List<String> nano.honto = Arrays.asList(nano.honto);

・tomodachi関数に引数したい型を記入

public Nanoda tomodachi(ArrayList<String> kemono, ArrayList<String> friends) ↓ public Nanoda ArrayList<String> tomodachi(ArrayList<String> kemono, ArrayList<String> friends)

→ 引数の型の不一致は消えましたが、下記のエラーが発生しました。

Arai.java:36: エラー: ';'がありません public Nanoda ArrayList<String> tomodachi(ArrayList<String> kemono, ArrayList<String> friends){ ^ Arai.java:36: エラー: 無効なメソッド宣言です。戻り値の型が必要です。 public Nanoda ArrayList<String> tomodachi(ArrayList<String> kemono, ArrayList<String> friends){ ^ エラー2個

解決したいこと

 改めて解決したいことのまとめです。
・mainメソッドから引数した複数のArrayListの値を処理し、結果を返したい
・エラー内容は引数の不一致
・「一部のメッセージは簡略化されています」というエラーも対処方法わからず
・可能であればaddやremoveを処理の中で行いたいため、Listに変換するという方法以外で解決したい

以上の内容で、助力をお願いしたいです。
また、答えそのものではなく、HPや他の質問で、これをみれば理解できます。といったものでも教えていただけると嬉しいです。

わかりにくい部分も多々あると思いますが、どなたかご教授いただけると幸いでございます。よろしくお願いいたします。

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

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

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

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

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

jimbe

2019/06/20 07:24

> 別メソッドで処理した複数の値をreturnでmainメソッドに返したい 仕様がはっきりしないと書きようがありません. この「複数の値」というのはどういったモノなのでしょうか, 文字列(String)なのか, 文字列の ArrayList (ArrayList<String>)なのか, 混在なのか, 使うときはどのようにするつもりなのか...等です
guest

回答3

0

ベストアンサー

ArrayList<String>とした場合、入れられるのはStringのみでArrayList<String>は入れられません。
質問から「ArrayList<String>のArrayListを返したい」と読んだので、こうすればできるはずです。

java

1ArrayList<ArrayList<String>> uso = new ArrayList<>();

ただし今度は"kemono"などを入れることができなくなります。どのような形態にしたいのでしょうか?

投稿2019/06/20 02:46

swordone

総合スコア20651

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

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

0

JavaDoc よめ、たぶんこういうことだろう

constructor

public ArrayList​(Collection<? extends E> c) Constructs a list containing the elements of the specified collection, in the order they are returned by the collection's iterator. Parameters: c - the collection whose elements are to be placed into this list Throws: NullPointerException - if the specified collection is null

addAll

public boolean addAll​(int index, Collection<? extends E> c) Inserts all of the elements in the specified collection into this list, starting at the specified position. Shifts the element currently at that position (if any) and any subsequent elements to the right (increases their indices). The new elements will appear in the list in the order that they are returned by the specified collection's iterator. Specified by: addAll in interface List<E> Overrides: addAll in class AbstractList<E> Parameters: index - index at which to insert the first element from the specified collection c - collection containing elements to be added to this list Returns: true if this list changed as a result of the call Throws: IndexOutOfBoundsException - if the index is out of range (index < 0 || index > size()) NullPointerException - if the specified collection is null

投稿2019/06/20 03:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

すみません、解決しました。
やりたいこととして、そもそもArrayListという手段が間違って言いました。
申し訳ありません。

投稿2019/06/25 00:10

Mu-LINE

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問