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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

4751閲覧

配列⇔リストの変換でエラーが出ます。

nununu_nu

総合スコア9

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/05/06 10:11

編集2020/05/06 13:29

前提・実現したいこと

変数nを設定しその数分の要素数を持つ配列m(素数を調べたいので2から始める)を作った後、そこから素数のみの配列zを作りたいです。
実現したい例としては、変数n=20の場合、配列m={2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21}、
配列Z={2,3,5,7,11,13,17,19}になるようにしたいです。

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

シンボルを見つけられません シンボル: クラス Int 場所: クラス Main
シンボルを見つけられません シンボル: 変数 z 場所: クラス Main

該当のソースコード

java

1import java.util.*; 2public class Main { 3 public static void main(String[] args){ 4 int n = 20; 5 int[] m = new int[n]; 6 ArrayList<Integer> intList = new ArrayList<Integer>(); 7 int flag; 8 for(int i = 0; i < m.length; i++){ 9 m[i] = i + 2; 10 flag = 0; 11 for(int j = 2; j < i; j++){ 12 if(m[i] % j == 0){ 13 flag = 1; 14 continue; 15 } 16 } 17 if(flag == 0){ 18 intList.add(m[i]); 19 Int[] z = intList.toArray(new String[intList.size()]); 20 } 21 } 22 System.out.print(Arrays.toString(z)); 23 } 24}

flag=0(素数)の場合の数値をリストに格納してあげて、それを配列にすれば実現したい例の配列zのようになると考えているのですが、上記エラーメッセージが出てしまいました。どうすれば解決するのかアドバイスを頂けると幸いです。また、もしほかに答えを求める良い方法がありましたらぜひ教えていただきたいです。
よろしくお願い致します。

※追記
以下に修正したのですが、また別のエラーメッセージが出ました。

java

1import java.util.*; 2public class Main { 3 public static void main(String[] args){ 4 int n = 20; 5 int[] m = new int[n]; 6 int[] z; 7 int flag; 8 for(int i = 0; i < m.length; i++){ 9 m[i] = i + 2; 10 flag = 0; 11 for(int j = 2; j < i; j++){ 12 if(m[i] % j == 0){ 13 flag = 1; 14 continue; 15 } 16 } 17 if(flag == 0){ 18 List<Integer> list = Arrays.asList(m[i]); 19 z = list.toArray(new int[list.size()]); 20 } 21 } 22 System.out.print(Arrays.toString(z)); 23 } 24}

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

toArrayに適切なメソッドが見つかりません(int[]) メソッド java.util.List.<T>toArray(T[])は使用できません (推定型は宣言された境界に適合しません 推定: int 境界: java.lang.Object) メソッド java.util.List.toArray()は使用できません (実引数リストと仮引数リストの長さが異なります)

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

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

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

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

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

guest

回答3

0

素数の求め方が間違っていますね。それだと 4 が素数になってしまいます。

さて、配列 m は要素の個数が 20ですが、素数の個数は未定なので、
配列 z が用意できません。
そこで、z も要素数 20 で作っておいて、後から縮めればよいとすると、

Java

1import java.util.Arrays; 2 3class Main { 4 public static void main(String[] args) { 5 int n = 20; 6 int[] m = new int[n]; 7 int[] z = new int[n]; 8 int j = 0; 9 for (int i = 0; i < n; i++) { 10 m[i] = i + 2; 11 if (isPrime(m[i])) z[j++] = m[i]; 12 } 13 z = Arrays.copyOfRange(z, 0, j); 14 System.out.println(Arrays.toString(z)); 15 } 16 17 private static boolean isPrime(int n) { 18 for (int i = 2; i < n; i++) 19 if (n % i == 0) return false; 20 return true; 21 } 22}

素数の判定はもっといい方法がありますが、とりあえず単純なものにしておきます。

投稿2020/05/06 14:56

編集2020/05/06 15:08
kazuma-s

総合スコア8224

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

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

nununu_nu

2020/05/06 15:12

ありがとうございます。その方法もあるのですね・・・勉強になりました!
guest

0

ベストアンサー

toArrayに適切なメソッドが見つかりません(int[]) メソッド java.util.List.<T>toArray(T[])は使用できません

エラーの通りです。
toArrayの引数にint[]を使うことはできません。

配列m,zをInteger型にすることで解決できます。

Java

1import java.util.ArrayList; 2import java.util.Arrays; 3 4public class Main { 5 6 public static void main(String[] args) { 7 int n = 20; 8 Integer[] m = new Integer[n]; 9 ArrayList<Integer> intList = new ArrayList<Integer>(); 10 int flag; 11 for (int i = 0; i < m.length; i++) { 12 m[i] = i + 2; 13 flag = 0; 14 for (int j = 2; j < i; j++) { 15 if (m[i] % j == 0) { 16 flag = 1; 17 break; 18 } 19 } 20 21 if (flag == 0) { 22 intList.add(m[i]); 23 } 24 } 25 Integer[] z = intList.toArray(new Integer[intList.size()]); 26 System.out.println(Arrays.toString(z)); 27 } 28} 29

外側のループが回る度に~~Integer[] ~~z = intList.toArray(new Integer[intList.size()]);が実行されるのは効率が悪いのでループの外に出しました。
あとcontinueは意味が無いのでbreakに変更しました。

また、このままでは正確に素数を取り出すことはできないので頑張って直してみてください。
ヒント
ループの条件式

投稿2020/05/06 13:53

編集2020/05/06 15:30
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nununu_nu

2020/05/06 15:11

ありがとうございます。その方法でループの条件式を直したらできました!
guest

0

  1. JavaにIntという型はありません。
  2. z は if(flag == 0){ } の中で定義されているため、このスコープの外では参照できません。

投稿2020/05/06 10:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nununu_nu

2020/05/06 12:04

ありがとうございます。Int[] zのところををint[] zに変更したのですが、「互換性のない型 期待値: int[] 検出値: java.lang.String[]」とエラーメッセージが出ました。これはString[] zに変えればいいということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問