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

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

ただいまの
回答率

90.47%

  • Java

    14116questions

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

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

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,957

pigry

score 7

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;
    }

}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • KiyoshiMotoki

    2016/05/22 16:56

    「うまくいきません」ではなく、どのような問題が起きているのかを明記してください。まずは以下のリンクを一読されることをお勧めします。 https://teratail.com/help/question-tips#questionTips3-4

    キャンセル

回答 4

+1

  • 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/23 02:58

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

    >()がないので、このgetlcmれは変数の扱いになっています。
    ()はどこにつけるべきですか?

    キャンセル

  • 2016/05/23 10:50

    メソッドの基本から勉強し直すことをおすすめします。
    getgcdメソッドの宣言ではint型の数値を3つ必要としていますよね?ところがmainの中での

    int p = getgcd(m, n);

    では、int型の数値を2つしか渡していません。これではgetgcdメソッドはどうしたらいいかわからなくなります。

    ()をどこに付けたらいいかはそれこそkatoy様のコードと比べてください。

    キャンセル

checkベストアンサー

0

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

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(); // 入力

        System.out.println("gdc=" + getgcd(m, n));
        System.out.println("ocl=" + getlcm(m, n));
    }

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

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


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/23 01:29

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

    キャンセル

  • 2016/05/23 01:51

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

    キャンセル

  • 2016/05/23 06:22

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

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/23 01:27

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

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

  • 受付中

    JAVAに関する質問

    JAVAに関する質問です。 JAVAで以下のプログラムを作成しました。 import java.util.Scanner;  public class Sample {  /

  • 解決済

    占いの機能 Javaの学習中

    ただいま、Javaの初歩の本を利用し、占いの機能を製作したのですがエラーがでてしまいました。 その理由がわからないため質問させていただきたいと思います。 ソースコード publ

  • 解決済

    暗証番号入力のプログラム

    初めてこのサイトを利用するのとjava初心者なので、もし至らない点があればご指摘ください。 暗証番号をキーボードから入力し、正しければ「暗証番号が確認できました」間違っていれば「

  • 受付中

    csvの抽出条件について質問です

    csvファイルの読み込みにキーボード入力をした文字と一致するものを抽出させるプログラムをつくっています。 ただ読み込むだけならできるのですが、それに条件をつけると読み込めなくなりま

  • 解決済

    メソッドの切り離しについて (Java学習中)

    こんばんは。 今日は、メソッドについての質問です。 とても簡単なプログラミングで、数値を入力してもらってそれを左から順番に小さい方から並べるというものを作ろうとしました。 こ

  • 解決済

    最大公約数と最小公倍数の求め方に関して

    以下のサイトの問題をjavaを用いてプログラミングしてみたのですが、 サンプルInputを入力したところ、答えは会っているのですが、 OutPutでWrong Answerとさ

  • 受付中

    このコードをスマートにしてください

    aをb乗するプログラムを作成しております。 前回の質問で回答していただいた方々のおかげでとりあえずやりたかった動作をしてくれるプログラムは完成しました。 しかしこのプログラムを

  • 解決済

    乱数が羅列されているテキストファイルを読み込んで最大値と最小値を出力したいが正しい結果が得られない

    乱数が500個羅列されているテキストファイルを読み込んで最大値と最小値を出力したいのですが正しい結果が得られません。ちなみに乱数の範囲は5~1000です。全部で500個です。 以

同じタグがついた質問を見る

  • Java

    14116questions

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