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

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

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

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

Q&A

解決済

4回答

6178閲覧

javaで最大公約数と最小公倍数

pigry

総合スコア13

Java

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

0グッド

0クリップ

投稿2016/05/22 07:25

編集2016/05/22 08:14

javaで最大公約数と最大公約数と最小公倍数最小公倍数を求めるプログラムをwhileとm*n/gcdを使って書いたのですが,こんなエラーが出ました。

gcd.java:11: エラー: クラス gcdのメソッド getgcdは指定された型に適用できません。
int p = getgcd(m, n);
^
期待値: int,int,int
検出値: int,int
理由: 実引数リストと仮引数リストの長さが異なります
gcd.java:13: エラー: シンボルを見つけられません
System.out.println(getlcm);
^
シンボル: 変数 getlcm
場所: クラス gcd
gcd.java:18: エラー: メソッド本体がないか、abstractとして宣言されています
public static int getgcd(int m, int n, int p); {
^
gcd.java:19: エラー: クラス gcdのメソッド mainは指定された型に適用できません。
main();
^
期待値: String[]
検出値: 引数がありません
理由: 実引数リストと仮引数リストの長さが異なります
gcd.java:20: エラー: シンボルを見つけられません
p = n;
^
シンボル: 変数 p
場所: クラス gcd
gcd.java:20: エラー: シンボルを見つけられません
p = n;
^
シンボル: 変数 n
場所: クラス gcd
gcd.java:21: エラー: シンボルを見つけられません
while(m%p!=0 || n%p!=0) p=p-1;
^
シンボル: 変数 m
場所: クラス gcd
gcd.java:21: エラー: シンボルを見つけられません
while(m%p!=0 || n%p!=0) p=p-1;
^
シンボル: 変数 p
場所: クラス gcd
gcd.java:21: エラー: シンボルを見つけられません
while(m%p!=0 || n%p!=0) p=p-1;
^
シンボル: 変数 n
場所: クラス gcd
gcd.java:21: エラー: シンボルを見つけられません
while(m%p!=0 || n%p!=0) p=p-1;
^
シンボル: 変数 p
場所: クラス gcd
gcd.java:21: エラー: シンボルを見つけられません
while(m%p!=0 || n%p!=0) p=p-1;
^
シンボル: 変数 p
場所: クラス gcd
gcd.java:21: エラー: シンボルを見つけられません
while(m%p!=0 || n%p!=0) p=p-1;
^
シンボル: 変数 p
場所: クラス gcd
エラー12個

どこを直せば良いか教えてください。

import java.util.Scanner;

public class gcd {
public static void main(String[] args) {
Scanner kbd = new Scanner(System.in);
System.out.print("m="); // prompt
int m = kbd.nextInt(); // 入力
System.out.print("n="); // prompt
int n = kbd.nextInt(); // 入力

int p = getgcd(m, n); System.out.println(p); System.out.println(getlcm);

}

public static int getgcd(int m, int n, int p); { return p = n; while(m%p!=0 || n%p!=0) p=p-1;

}

public static int getlcm(int m, int n, int p) { return m*n/p; }

}

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

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

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

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

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

guest

回答4

0

  • getgcdの引数の数が合わない

gcd.java:11: エラー: クラス gcdのメソッド getgcdは指定された型に適用できません。

int p = getgcd(m, n); ^

期待値: int,int,int
検出値: int,int
理由: 実引数リストと仮引数リストの長さが異なります

getgcdはintを3つ必要としてるのに2つしか渡さないのでは処理できません。

  • getlcmをフィールド変数のように呼んでいる

gcd.java:13: エラー: シンボルを見つけられません

System.out.println(getlcm); ^

シンボル: 変数 getlcm
場所: クラス gcd

()がないので、このgetlcmれは変数の扱いになっています。

  • getgcdメソッドの宣言直後に;が入っている

先述した2箇所のエラーとmain()どうの以外全てはこれ起因。(引数なしのmain()なんぞどこに書いてあるんだ?)
abstractでもないのに、本文のないメソッドと言うのはありえません。そしてそこで区切られているため、その後のブロックでの各変数が認識できないでいます。

ほか、最大公約数に関しては「ユークリッドの互除法」を調べてみることをおすすめします。

投稿2016/05/22 08:13

編集2016/05/22 10:58
swordone

総合スコア20651

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

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

pigry

2016/05/22 17:58

失礼しました、ちゃんと確認していなかったです。 度重ねて質問なのですが、 >getgcdはintを3つ必要としてるのに2つしか渡さないのでは処理できません。 これってどこのintのことでしょうか・・・? >()がないので、このgetlcmれは変数の扱いになっています。 ()はどこにつけるべきですか?
swordone

2016/05/23 01:50

メソッドの基本から勉強し直すことをおすすめします。 getgcdメソッドの宣言ではint型の数値を3つ必要としていますよね?ところがmainの中での int p = getgcd(m, n); では、int型の数値を2つしか渡していません。これではgetgcdメソッドはどうしたらいいかわからなくなります。 ()をどこに付けたらいいかはそれこそkatoy様のコードと比べてください。
guest

0

ベストアンサー

質問文のコードをベースに動作するようにしてみました。

java

1import java.util.Scanner; 2 3public class gcd { 4 public static void main(String[] args) { 5 Scanner kbd = new Scanner(System.in); 6 System.out.print("m="); // prompt 7 int m = kbd.nextInt(); // 入力 8 System.out.print("n="); // prompt 9 int n = kbd.nextInt(); // 入力 10 11 System.out.println("gdc=" + getgcd(m, n)); 12 System.out.println("ocl=" + getlcm(m, n)); 13 } 14 15 public static int getgcd(int m, int n) { 16 int p = n; 17 while (m % p != 0 || n % p != 0) { 18 p = p - 1; 19 } 20 return p; 21 } 22 23 public static int getlcm(int m, int n) { 24 int p = getgcd(m, n); 25 return m * n / p; 26 } 27}

どこが変わったかをチェックしてみてください。

投稿2016/05/22 09:44

katoy

総合スコア22324

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

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

pigry

2016/05/22 16:29

ありがとうございます! 二番目のgetgcdメソッドに、return p;がなかったから動かなかったということでしょうか??
swordone

2016/05/22 16:51

動かなかった原因は私の回答にまるっと書いてあるので無視しないでください。
katoy

2016/05/22 21:22

変更が必要だった箇所は1つだけではありませんでした。 変更点すべてを理解してみて欲しいです。 質問文にあったコードは、そもそもコンパイルもできません。 まずは、コンパイルができるようにご自身で編集をしてみてください。 その後、最大公倍数、最小公倍数が正しく求まるように編集をしてみてください。
guest

0

とりあえず文法エラーが起きている旨のメッセージです。もっとも文法だけでなく、意図も通らないと思ういますが。

投稿2016/05/22 09:27

HogeAnimalLover

総合スコア4830

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

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

0

ちょっとどこからつっこんだらいいか…
とりあえず参考に
http://www.geocities.jp/m_hiroi/java/abcjava04.html

投稿2016/05/22 08:00

takasima20

総合スコア7458

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

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

pigry

2016/05/22 16:27

ありがとうございます!参考にさせていただきます^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問