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

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

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

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

Q&A

解決済

1回答

2262閲覧

javaで素数を出す方法

wakuwakusan560

総合スコア1

Java

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

0グッド

2クリップ

投稿2021/06/29 06:14

前提・実現したいこと

授業で現在このような課題をしています。

エラトステネスの篩により素数を求めて表示するプログラムを作成しなさい。
また、整数以外が入力された場合の例外処理も実装すること。

※エラトステネスの篩とは
指定された整数n以下の素数を発見するアルゴリズム。
ある整数nが2からn-1まで、いずれの整数でも割り切れなければ整数nは素数となる。
例えば素数13は、2 3 4…のどの数でも割り切ることはできないので素数だと求められる。

戻り値        名前 引数

メソッド boolean[] eratosthenes int n
◆eratosthenesメソッドの処理
引数で受け取った整数n以下の素数をエラトステネスの篩を使用して求めて、boolean型配列
素数フラグに結果を代入し、配列ごと戻り値として返す。

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

エラー: クラス kad15_2のメソッド eratosthenesは指定された型に適用できません。 boolean[] primeNumFlag=eratosthenes(); ^ 期待値: int 検出値: 引数がありません 理由: 実引数リストと仮引数リストの長さが異なります kad15_2.java:39: エラー: 二項演算子'<'のオペランド型が不正です for(int i=2;i<primeNumFlag;i++){ ^ 最初の型: int 2番目の型: boolean[] kad15_2.java:40: エラー: シンボルを見つけられません if(flag==true){ ^ シンボル: 変数 flag 場所: クラス kad15_2 エラー3個

該当のソースコード

java

1 import java.util.*; 2 3 public class kad15_2{ 4 public static boolean[] eratosthenes(int n){ 5 boolean[] flag=new boolean[n+1]; 6 7 for(int i=2;i<=n;i++){ 8 flag[i]=true; 9 } 10 11 for(int i=2;i<=Math.sqrt(n);i++){ 12 if(flag[i]==false){ 13 continue; 14 } 15 for(int j=i*2;j<=n;j+=i){ 16 flag[j]=false; 17 } 18 } 19 return flag; 20 } 21 22 public static void main(String[] args){ 23 Scanner sc=new Scanner(System.in); 24 25 try{ 26 System.out.println("いくつまでの素数を求めますか?>"); 27 int inNum=Integer.parseInt(sc.next()); 28 }catch(NumberFormatException e){ 29 System.out.println("入力値が不正です。"); 30 } 31 32 boolean[] primeNumFlag=eratosthenes(); 33 34 for(int i=2;i<primeNumFlag;i++){ 35 if(flag==true){ 36 System.out.println(i+""); 37 } 38 } 39 } 40 } 41 42

試したこと

静的メソッド?なるものがよくわからず、上のメソッドでなんかいろいろやってそれをmainメソッドに持ってくるという過程がよくわかりません…
そこでこんがらがっているせいで今やっている内容が全く分からないんです。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

neconekocat

2021/06/29 06:20

ものすごく詳細なエラーメッセージ出てるんですからまずはそこを読んであげてください。
K_3578

2021/06/29 06:23 編集

エラーメッセージは意味不明な文章で怒られてるんじゃないので、ちゃんと読みましょう。 文言の意味がわからないならググりましょう。
dodox86

2021/06/29 06:34

> 静的メソッド?なるものがよくわからず、上のメソッドでなんかいろいろやって コードを拝見するに、エラーメッセージの解読以前の問題のような。回答に窮します。 いきなり全部コードを書こうとするのではなく、少しずつ書き進めましょう。
gentaro

2021/06/29 08:32

エラーメッセージ読まずに質問する人って何考えてるんだろう。多いけど。
guest

回答1

0

ベストアンサー

とりあえず、エラーメッセージの意味を書きます。
理由がわかれば直せますよね?

エラー: クラス kad15_2のメソッド eratosthenesは指定された型に適用できません。
^
期待値: int

検出値: 引数がありません
理由: 実引数リストと仮引数リストの長さが異なります

メソッドeratosthenesは、引数としてintを想定(期待)しています。
public static boolean[] eratosthenes(int n){

boolean[] primeNumFlag=eratosthenes();

エラーメッセージにある通り、引数がありません


kad15_2.java:39: エラー: 二項演算子'<'のオペランド型が不正です
for(int i=2;i<primeNumFlag;i++){
^
最初の型: int

2番目の型: boolean[]

for文の^で示された部分、i<primeNumFlag

i(最初の型: int)とprimeNumFlag(2番目の型: boolean[])を <演算子で比較しようとしています。
ですが、intとboolean[]は比較できません。


kad15_2.java:40: エラー: シンボルを見つけられません
if(flag==true){
^
シンボル: 変数 flag

場所: クラス kad15_2

mainメソッド内で、flagという変数は未定義です。
ちなみに、eratosthenesメソッドで定義されているflagはローカル変数なのでmainから参照できません。
仮に参照できたとしてもboolean配列なので、booleanと比較することはできません。

投稿2021/06/29 06:50

momon-ga

総合スコア4826

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

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

wakuwakusan560

2021/07/01 06:37

エラーメッセージもわからないレベルの初心者だったのでわかりやすく解説していただきありがとうございました! なんとか作ることができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問