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

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

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

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

Q&A

解決済

3回答

387閲覧

javaのオーバーロードについて

akihiro130

総合スコア13

Java

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

0グッド

0クリップ

投稿2019/01/21 15:25

編集2019/01/22 04:22

``

コード ```### 前提・実現したいこと 任意の整数値を入力し、その数値を出力した上で、割り算をしたい。 ```java コード import java.util.*; class prog { public static void main( String[] args) { int num1, num2; double ans; num1 = func(); func(num1); num2 = func(); func(num2); ans = func(num1, num2); System.out.println(num1+"÷"+num2+"="+ans); } public static int func(int num1) { Scanner in = new Scanner(System.in); System.out.print("整数値を入力:"); num1 = in.nextInt(); System.out.println("整数値="+num1); return num1; } public static int func(int num2) { Scanner in = new Scanner(System.in); System.out.print("整数値を入力:"); num2 = in.nextInt(); System.out.println("整数値="+num2); return num2; } public static double func(int num1, int num2) { double ans = num1 / num2; return ans; }

}
このようなソースの際に以下のようなエラーが出る。

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

prog.java:26: エラー: メソッド func(int)はすでにクラス progで定義されています
public static int func(int num2) {
^
prog.java:8: エラー: funcに適切なメソッドが見つかりません(引数がありません)
num1 = func();
^
メソッド prog.func(int)は使用できません
(実引数リストと仮引数リストの長さが異なります)
メソッド prog.func(int,int)は使用できません
(実引数リストと仮引数リストの長さが異なります)
prog.java:11: エラー: funcに適切なメソッドが見つかりません(引数がありません)
num2 = func();
^
メソッド prog.func(int)は使用できません
(実引数リストと仮引数リストの長さが異なります)
メソッド prog.func(int,int)は使用できません
(実引数リストと仮引数リストの長さが異なります)

出力例
整数を入力:10
整数値=10
整数を入力;3
整数値=3:
10÷3=3.333333333333335

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

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

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

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

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

LouiS0616

2019/01/21 15:29

num1 = func(); はいったいどのような意図で挿入したコードなのでしょうか?
akihiro130

2019/01/21 15:32

課題なのですが import java.util.*; class prog { public static void main( String[] args) { int num1, num2; double ans; num1 = func(); func(num1); num2 = func(); func(num2); ans = func(num1, num2); System.out.println(num1+"÷"+num2+"="+ans); } このプログラムにオーバーロードを用いてfuncメソッドを用いて出力せよというものです
guest

回答3

0

public static int func(int num1) {

public static int func(int num2) {

全く同じメソッドが複数存在してます。これではダメです

num1 = func();

引数を持たないfuncメソッドはどこにも定義されてません。
これもダメです

投稿2019/01/21 15:32

y_waiwai

総合スコア87719

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

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

akihiro130

2019/01/21 15:35

funcメソッドの名前をそれぞれ違うものにし、引数を持たせればいいということですか?
y_waiwai

2019/01/21 15:39

オーバーロードさせるための条件を調べてみましょう 引数が同一のものはオーバーロードできません 引数を同一にしたいなら、メソッド名を変えなければいけないし、 メソッド名を同じにしたいなら、引数を変えましょう
akihiro130

2019/01/21 15:44

ありがとうございます。 調べてみて、引数の数・型・順番の少なくともひとつが異なることが必須とありました。
guest

0

ベストアンサー

課題のポイントは2つ

1.オーバーロードを理解して、以下の3つの関数を定義すること

  • func()
  • func(int)
  • func(int, int)

使い方(呼ばれ方)は、元のテンプレートにある通り

java

1num1 = func(); // func() の呼び出し 2func(num1); // func(int) の呼び出し 3ans = func(num1, num2); // func(int, int) の呼び出し

戻り値の型については、ご自身で考えて下さい。
※とはいえ、テンプレートがあるので自明ではありますが・・・

2.上記3つの関数の内容を出力例から処理の内容を決めて作成すること

整数を入力:10

整数値=10
整数を入力:3
整数値=3
10÷3=3.333333333333335

現状の実装で、ほぼほぼいいところまでできています。

投稿2019/01/22 02:40

momon-ga

総合スコア4820

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

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

akihiro130

2019/01/22 02:56

funcソッドの定義の仕方ですよね?
momon-ga

2019/01/22 03:35

はい。 「このプログラムにオーバーロードを用いてfuncメソッドを用いて出力せよ」というのが、以下の3つです。 ・funcメソッドを定義せよ。 ・元のテンプレートを変えずにオーバーロードを用いよ ・出力例になるように実装せよ
akihiro130

2019/01/22 03:41

fincメソットの引数の部分と public static int func() の記述がわからないです。 出力例はできてるので、呼び出しのメソッドをどう書くかわからない状態です
guest

0

ひょっとして、メソッドがスコープを作っていることをご存じないのでしょうか?

Java

public static int func(int num1) {
Scanner in = new Scanner(System.in);
System.out.print("整数値を入力:");
num1 = in.nextInt();
System.out.println("整数値="+num1);
return num1;
}

mainメソッド内のnum1と、このメソッド内のnum1は、名前が同じだけで全くの別物です


そもそも入力用の関数は二つも用意する必要はありません。

Java

1public static int func() { 2 Scanner in = new Scanner(System.in); 3 4 System.out.print("整数値を入力:"); 5 int num = in.nextInt(); 6 System.out.println("整数値="+num); 7 8 return num; 9}

ここでの変数numは、メソッドfuncの中だけで有効です。
メソッドの内部では意味を持っていても、メソッドを利用する側は一切意識しなくて構いません。

次のように利用すれば良いだけなのです。

Java

1num1 = func(); 2num2 = func();

その他気になる点は多々ありますが、論点が逸れるので今は控えておきます。

コードの書き方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
Java

投稿2019/01/21 15:35

編集2019/01/21 15:39
LouiS0616

総合スコア35658

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

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

akihiro130

2019/01/21 17:16

このプログラムでコンパイルした際ans=funcなので、出力処理が3回になるとおもうのですが java理解不足ですみません
swordone

2019/01/21 18:56

「ans=funcである」ことと「出力処理が3回になる」ことに全く関連性が見られません。
akihiro130

2019/01/22 00:59

すみません、入力処理です
LouiS0616

2019/01/22 02:21

funcの返り値をnum1やnum2に代入しているだけです。 変数に応じて一つずつメソッドを用意するのは無駄です。
akihiro130

2019/01/22 02:46

理解しました。 ありがとうござます。
m.ts10806

2019/01/22 04:19

質問者さん 回答の >コードの書き方について この部分はスルーされないよう…。質問は編集できますので
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問