引数とは、以下のURLに次のように定義されていました。


「メソッドを呼び出す際に渡された値を受け取る変数。」
http://www.kab-studio.biz/Programing/JavaA2Z/Wor …

質問:引数とは、「あるメソッドに入力する(渡す)値」ですよね?それなのに、「メソッドを呼び出す際に渡された値を受け取る変数。」とかいてありますが、これはどういうことですか?
java初心者の私でもわかりやすいように解説してくだされば幸いです。

質問2:上記URLに以下のようなことも書かれていました。
「呼び出す際に「メソッド名( 引数に渡す値 );」という書式で「引数の変数」に「引数に渡す値」をコピーすることができる。
このコピーは、変数の代入と全く同じである。」

これもよく意味がわかりません。
とくに、「引数の変数」という記述がよくわかりません。また、なぜ変数の代入と同じなのですか?

うーん、、よくわからない。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

No1です。



>質問1:この「定義」が実際のプログラミングにおいて何に対応するかわかりません。
>例えば、メソッド宣言がその定義に対応しますか?

メソッド宣言とかメソッド定義とかいうものが相当します。正式文法書を読んだこと無いのでどちらが正確な用語か知りません。
Cだと「関数定義」なのですが。それもあって、先の回答では「定義」と書きました。

>質問2:「メソッドを呼び出す際に渡された値を受け取る変数。」と書いてある文の「値を受け取る変数」とは、詰まるところ実引数でなく仮引数のことを指しているのですか?

そうです。

>そして、「メソッドを呼び出す際に渡された値」とは実引数のことことで、この実引数をメソッドを実行する際に入力しますが、それを受け取るのが仮引数として定義された変数ということでしょうか?

そうです。
    • good
    • 0
この回答へのお礼

お返事遅れてしまい大変申し訳ありませんでした。。

ありがとうございます!
疑問点すっきりしました!

お礼日時:2011/04/25 02:06

学校の数学なんかで



f(x) = x*2 + 1

とするとき f(2) は何になる?
なんて感じの問題を見たことありません?

この問題の場合は x に 2 が代入されたものとして計算するわけですが、
これと考え方は一緒です。

Java風に言えば

f(x) というメソッドがあって、これは x という変数が引数として定義されているわけです。

f(2) とすると自動的に x に 2 が代入されて x*2 + 1 が計算されるわけですね。

多くのプログラミング言語は数学的な理論や考え方が元になって作られていることが多いですよ。


大学の教科書みたいな抽象的な文章の羅列だけを見て悩まずに
実際のプログラムを見て作って実行してみてみることをお勧めしますよっと。

この回答への補足

丁重なご回答誠にありがとうございます!
ご回答を拝読した上で、疑問点が沸いたので、再度質問します

>これは x という変数が引数として定義されているわけです。

質問1:この「定義」が実際のプログラミングにおいて何に対応するかわかりません。
例えば、メソッド宣言がその定義に対応しますか?
例えば、public static void main(String args[]){ とか。

質問2:「メソッドを呼び出す際に渡された値を受け取る変数。」と書いてある文の「値を受け取る変数」とは、詰まるところ実引数でなく仮引数のことを指しているのですか?
そして、「メソッドを呼び出す際に渡された値」とは実引数のことことで、この実引数をメソッドを実行する際に入力しますが、それを受け取るのが仮引数として定義された変数ということでしょうか?

補足日時:2011/04/22 14:17
    • good
    • 0

一般には、実引数と仮引数という言葉があります。


定義:
public void abc(int x, int y) { 。。。。。 };

呼び出し:
abc(10, a);

x や y が仮引数で、10 や a が実引数です。

メソッドの呼び出しは、x=10; y=a; してから 。。。。。。 の部分を実行するのとほぼ同じです。

この回答への補足

丁重なご回答誠にありがとうございます!

追加で質問させていただきます!

質問1:この「定義」が実際のプログラミングにおいて何に対応するかわかりません。
例えば、メソッド宣言がその定義に対応しますか?
例えば、public static void main(String args[]){ とか。

質問2:「メソッドを呼び出す際に渡された値を受け取る変数。」と書いてある文の「値を受け取る変数」とは、詰まるところ実引数でなく仮引数のことを指しているのですか?
そして、「メソッドを呼び出す際に渡された値」とは実引数のことことで、この実引数をメソッドを実行する際に入力しますが、それを受け取るのが仮引数として定義された変数ということでしょうか?

補足日時:2011/04/22 14:17
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q教えてgooプラスへの質問の仕方を教えて下さい

教えてgooプラスへの質問の仕方を教えて下さい。
具体的には、教えてgooプラス>暮らし、人生>相続、シニア>相続、遺言
の分野で質問したいのですが、クリックすると、先人の質問と回答にしかアクセスできません。私の質問は、どのようにすれば入力できるか教えて下さい。
教えてgooで質問を入力する事はできるのですが、カテゴリー選択(教えてgooプラスの選択)ができません。

Aベストアンサー

教えて!goo プラスは閲覧専用のサービスです。
教えて!gooの会員でも質問はできません。
https://goo.e-srvc.com/app/answers/detail/a_id/4383/

元のQ&Aは「All About プロファイル」のものですから、こちらで利用登録をすると質問できると思います。
会員登録や質問投稿は無料です。
http://profile.allabout.co.jp/
http://profile.allabout.co.jp/help/h-41/

Q仮引数を用いた「メソッドの定義」について質問

仮引数を用いての「メソッドの定義」について、疑問点があります


以下のHPに以下のソースコードがありました。

http://sjc-p.obx21.com/word/jk/formalparameter1.html

class Dentaku{
public int plus( int i, int j ){
return i + j;
}
}

質問:これは、定義という観点から考えると、「pulusメソッドはi+jという加法の計算をする機能を持ったメソッドであることを定義している。」といえますか?

質問2:returnについて調べたのですか、抽象的すぎてようわかりませんでした。。どういう意味ですか?


質問3:iとjは仮引数で、int型ならどんな値でも代入できますよね?

Aベストアンサー

>質問:これは、定義という観点から考えると、「pulusメソッドはi+jという加法の計算をする機能を持ったメソッドであることを定義している。」といえますか?

そうです。


質問2:returnについて調べたのですか、抽象的すぎてようわかりませんでした。。どういう意味ですか?

returnの和訳どおり、処理を終えて帰ることです。
どこに戻るかというとそのメソッドを呼んだところにです。
そのときに、そのメソッドの結果を返すことができます。

これは i + j という計算結果を返してあげる、ということです。


どうも言葉尻なことばかりにこだわっているように思えます。
実際にプログラムを書いて実行してみればすぐにわかることばかりで
悩んでおられますね。

学習方針にかなり問題があると思いますよ?

QOKに残っているgoo登録ユーザーの質問回答はどうなるのか

先日のOKWaveと教えてgooの分離により
分離前になされた質問はgoo側では殆どが強制締切となりました。
しかしながら、OK側には回答受付中となっている質問が多いです。

そこで疑問なのですが。

・分離前になされた、現在受付中のgooからの登録ユーザーの質問は
今後OK側ではどうなるのでしょうか?
これまでのIDでは恐らくOKにログイン出来ないでしょうから
締切も何も出来なくなっているものと思われます。
このまま強制的に質問が締め切られるのを待つしかないのでしょうか?

・OK側で受付中だった分離前の質問が締め切られ
goo登録ユーザーの回答にベストアンサーが付いた場合の対応はどうなるのでしょうか?
分離しgoo側では強制締切になっていますから
goo側の集計には反映しないのでしょうけれど
ならばその分はどこに反映されてしまうのでしょうか?
そのままOK側だけに反映されるのでしょうか。

goo側にもOK側にもこのあたりの説明が全く無いので質問してみました。

Aベストアンサー

こんばんブゥ

質問が4つ・・・OK側で放置になっている当事者です。

これらの質問については、goo側で締め切っています。
OK登録者にも、BAをつけましたが・・・・その人に反映されませんでした・・・
当然と言えば、当然なのですが・・・・
あと、数日で4週間経過する質問があるので、どうなるか観察しています。

>goo側では強制締切になっています

一時的に強制締め切りになりましたが、最後の回答から1週間を経過していないものは、受付が復活しました。

これにより、子ブたんの質問では、分離後にOK側で回答されたものと、goo側で回答されたものができ、質問は一緒でも、回答が違うというものがあるブゥ

なお、分離前にOK登録者がした質問は、分離時にgoo側で締め切りにされたので、BAはそのままOK側だけに反映されるだけでしょう。


ところで、一番不思議に思っているのは、分離したことにより、OK側との関係が切れたgoo登録者のプロフをいつまで表示し続けるのでしょうか?
はっきり言って、個人情報を勝手に公開している状態です・・・・
そして、この公開は、利用者が自由に削除・編集できるという前提のもとになっているはずなのに、
正直、OKに対しては、個人情報の管理というコンプライアンスがないのでは、と思っています。

こんばんブゥ

質問が4つ・・・OK側で放置になっている当事者です。

これらの質問については、goo側で締め切っています。
OK登録者にも、BAをつけましたが・・・・その人に反映されませんでした・・・
当然と言えば、当然なのですが・・・・
あと、数日で4週間経過する質問があるので、どうなるか観察しています。

>goo側では強制締切になっています

一時的に強制締め切りになりましたが、最後の回答から1週間を経過していないものは、受付が復活しました。

これにより、子ブた...続きを読む

Q静的メソッドとインスタンスメソッドを定義する方法

簡単な、カウンタクラスからのインスタンス作成とその利用のテストを行いました。

テストとして作成した以下の内容のファイルをブラウザ(IEやFireFox)で開くと、期待した結果は返りますが、(Windowsで処理待ちを示す)砂時計マークがいつまで経っても消えません。

どこかで永続ループでもしているのでしょうか。

どこに問題があるのか、また、こういった問題のデバッグのコツを教えて下さい。
よろしくお願いします。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<HTML>
<HEAD>
<TITLE>教えて!goo</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<META HTTP-EQUIV="Content-Script-Type" CONTENT="javascript">

<SCRIPT TYPE="text/javascript">
function Counter(initialCount) {
this.count = initialCount;
}

Counter.prototype = {
count : 0,
increment : function() {
this.count += 1;
},
decrement : function() {
this.count -= 1;
}
}

Counter.newInstance = function(initialCount) {
return new Counter(initialCount);
}

var counter;

function testCounter() {
counter = Counter.newInstance(100);
counter.increment();
document.write(counter.count);
}

</SCRIPT>

</HEAD>

<BODY ONLOAD="testCounter()">
</BODY>
</HTML>

簡単な、カウンタクラスからのインスタンス作成とその利用のテストを行いました。

テストとして作成した以下の内容のファイルをブラウザ(IEやFireFox)で開くと、期待した結果は返りますが、(Windowsで処理待ちを示す)砂時計マークがいつまで経っても消えません。

どこかで永続ループでもしているのでしょうか。

どこに問題があるのか、また、こういった問題のデバッグのコツを教えて下さい。
よろしくお願いします。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4...続きを読む

Aベストアンサー

writeで書き込んだ後はcloseしてください。

Q私がOKWaveにした質問が教えて!Gooにも

たまにKOWavedで主に質問をしている程度ですが,教えて!Gooにも登録だけしてました。
未だ一度もGooは使った事がなかったのですが,今日Gooを久しぶりに見に行きました。
そうすると何と天文欄でしたが,私がOKWaveにした質問がそのまま入っているではありませんか。
即ちOKWave=教えて!Goo
なのでしょうか?

なお登録名はそれぞれ違います。

Aベストアンサー

#2です。
>二つ目のURLを開いても,同じOKWaveではないでしょうか?
違いますよ。

>少し場面が違って見えるだけで,どういう意味で別サイトと言われるのでしょうか?
OKWaveのロゴをクリックするとそのサイトのホームに移動しますが、そこに
「Bekkoame@OKWaveコミュニティーにようこそ!」と書かれていて
別のサイトだとわかります。

>OKWaveの中に別のサイトもあるという意味なのでしょうか?
違います。URLのドメイン部分をご確認ください。別サイトだとわかるはずです。
ちなみに、例示したサイトは
http://www.bekkoame.jp/
が母体です。

>これが持つ特徴は何でしょう。
例示したサイトはドメインが異なるだけではなく、質問のページにも
・1つの質疑についた回答は1つのページ内に収まる
・OKWave本家では回答と回答の間や右側のペインにある広告がまったくない
などの違いがあります。

>さてYahooでは知恵袋があるのですが,ここでの天文欄の数とOKWaveとでは比較にならない量の違いですが,何が原因でしょうか?
宣伝広告のしかたに差異があったのでしょうね。
2004年に始まった知恵袋ですが、2006年には会員数で並び、追い抜き、現時点ではおそらく20倍以上の差ができ、毎日その差は広まっています。
Yhoo!はポータルサイトでもあるため、宣伝がしやすいですから。
ただ、GoogleやYahooでさえ、web検索結果を見ると、常にどの検索語句でも知恵袋よりもここが上位にヒットします。
ユーザーの役に立つか立たないかという点ではどちらもほぼ一緒だと思っています。ヒマつぶし以外の役には立ちません。

#2です。
>二つ目のURLを開いても,同じOKWaveではないでしょうか?
違いますよ。

>少し場面が違って見えるだけで,どういう意味で別サイトと言われるのでしょうか?
OKWaveのロゴをクリックするとそのサイトのホームに移動しますが、そこに
「Bekkoame@OKWaveコミュニティーにようこそ!」と書かれていて
別のサイトだとわかります。

>OKWaveの中に別のサイトもあるという意味なのでしょうか?
違います。URLのドメイン部分をご確認ください。別サイトだとわかるはずです。
ちなみに、例示したサイトは
http://...続きを読む

Qmainメソッドの引数

Javaのプログラミングを練習しています。
下記のような問題があり、プログラムを組んでみたのですが
何か足りないようで思うような処理ができません。
ご教授頂けたら幸いです。
宜しくお願いします。

main()メソッドの引数で指定された名前のファイルに、キーボードから入力された内容を1行ずつ(上書きモードで)書き込むプログラムを作成して下さい。
(キーボードからの入力内容がない(空文字列の)場合にはプログラムを終了させて下さい)
ただし、引数の個数が1個でない場合には「ファイル名を正しく指定して下さい」と表示して、プログラムを異常終了させて下さい。
又、処理の途中で例外が発生した場合には、発生した例外の内容を表示して、プログラムを異常終了させて下さい。

import java.io.*;
public class Sample101
{
public static void main(String[] args)
{
BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
try{
PrintWriter fout = new PrintWriter(new BufferedWriter(new FileWriter("text1.txt")));
System.out.print("ファイルに書き込む文字列を入力して下さい >");
String s1 = br.readLine();
fout.println(s1);
fout.close();
}
catch(Exception e){
System.out.print("ファイル名を正しく指定して下さい");
System.exit(1);
}
}
}

Javaのプログラミングを練習しています。
下記のような問題があり、プログラムを組んでみたのですが
何か足りないようで思うような処理ができません。
ご教授頂けたら幸いです。
宜しくお願いします。

main()メソッドの引数で指定された名前のファイルに、キーボードから入力された内容を1行ずつ(上書きモードで)書き込むプログラムを作成して下さい。
(キーボードからの入力内容がない(空文字列の)場合にはプログラムを終了させて下さい)
ただし、引数の個数が1個でない場合には「ファイル名を...続きを読む

Aベストアンサー

>main()メソッドの引数で指定された名前のファイル

とあるのに

PrintWriter fout = new PrintWriter(new BufferedWriter(new FileWriter("text1.txt")));

と、text1.txtと固定になってますね。

>ただし、引数の個数が1個でない場合には「ファイル名を正しく指定して下さい」と表示して、プログラムを異常終了させて下さい。

引数のチェックしていませんね。

>(キーボードからの入力内容がない(空文字列の)場合にはプログラムを終了させて下さい)

入力があってもなくても1度の入力で終わってしまいますね。
他にも「おや?」な部分がありますけど、それは上記の部分を直してからのほうがよろしいかと。

Q教えて!goo+に質問するには?

ネット初心者です。
2点質問があります。

先ほど“教えて!goo+”に質問したつもりが、“教えて!goo”に質問してしまいました。(ひどく姉が不安そうだったので、専門の方のご意見があれば、安心して行動できるかと思い+を選択したつもりでした)

1.goo+に質問するにはどうしたらよいですか?
2・同じ質問を2か所でした場合、ネチケット違反だと思うのですが
  この場合、どのように対処すべきなのでしょうか?
(やはりgoo+に質問したいのです・・・)

よろしくお願いします。

Aベストアンサー

提携サイト(?)の、

All About プロファイル
http://profile.allabout.co.jp/

でのQ&Aの内容が粋されて、教えて!gooプラスに表示されます。

そういう専門家の回答が欲しいと言う事なら、上記サイトで質問してみてください。
更に、教えて!gooプラスに掲載されたいという事なら、掲載カテゴリの質問にする事が前提で、後は運頼みです。
他に無い、ユニークな質問とかなら、取り上げられやすいかも。

Qアサーションでメソッドの引数をチェックする

お世話になります。
SJC-P取得のための勉強をしている中で、
次の疑問点があります。
------------------------------------------
アサーションの使い方として、
(1)publicメソッドの引数をアサーションでチェックする--->ふさわしくない使い方
(2)privateメソッドの引数をアサーションでチェックする--->正しい使い方
------------------------------------------
以下のような解釈かと(無理やり)考えました。
privateメソッドは、自分自身しか使わない?ため、
引数に変な値を渡すことは無い。
publicメソッドは、他の人も使う可能性があり、
引数に変な値を渡すことが十分有りうる。
有り得る/有り得ないで、アサーションの
使う/使わないを決める???

しかしいまいちピンときません。
わかりやすく教えていただけませんでしょうか。

よろしくお願いします。

Aベストアンサー

個人的な意見ですが、
アサーションっていうのは、
いわば、プログラマがココでは、こうなっているハズという仮定を保証するものだと思います。
例えば
a / b
という処理をするときbが0なら0で割り算したという例外が起こるでしょう。
そういう例外は起こるべくして起こる例外ですので、こういう単なる例外に関して、
assert b!=0;
とかしてアサーション例外を起こさせるのは変です。
bが0であるかどうかをチェックしたり、もし0ならそれを回避するような処理を書いていてその処理の後では、「bは0ではない」と仮定する
ような場合には、アサートする意味がある(つまりこの部分で処理済みの処理にバグがあることを検出できる)と思います。

そういう意味では、単なるパラメータのチェックをpublicメソッドでやるなら例外を起こすべきだと思います。
privateメソッドの場合、クラスの実装をしている状態で、予期しないパラメータが渡されたということは、バグとしていいと思うので、そういうアサートはありだと思います。

基本的には、
・この処理の前には、こうなっているハズだ
・この処理の後には、こうなっているハズだ
・この処理の前後で、かわっていないハズだ
という仮定を保証するような場合に使うということでいいんじゃないでしょうか

個人的な意見ですが、
アサーションっていうのは、
いわば、プログラマがココでは、こうなっているハズという仮定を保証するものだと思います。
例えば
a / b
という処理をするときbが0なら0で割り算したという例外が起こるでしょう。
そういう例外は起こるべくして起こる例外ですので、こういう単なる例外に関して、
assert b!=0;
とかしてアサーション例外を起こさせるのは変です。
bが0であるかどうかをチェックしたり、もし0ならそれを回避するような処理を書いていてその処理の後では、「bは...続きを読む

Q教えてgooの"最新の質問"をRSSリーダでチェックしたい

こんにちはtmgmです。

最近RSSリーダに興味津々です。
教えてgooもRSS対応になったとかで。

そこで私も教えてgooの最新の質問をRSSリーダでチェックしようとしたんですが、(教えてgooをRSSリーダに登録する方法が)いまいちわかりません。

私はRSSリーダに"glucose"というソフトを使用しています。(gooの"RSS対応になりました"のお知らせの中に乗っていたソフトです)

どなたか
・glucoseをお使いの方
・glucoseをお使いで、教えてgooの最新の質問を取り込み方法をご存知の方

いらっしゃいましたら、ご返答の程宜しく御願い致します。

Aベストアンサー

こんにちは。

使い方は
http://glucose.jp/
のドキュメントを参考にしてください。

教えてgooの最新の質問を取り込み方法
メニューの「ブラウザ」→「RSSの追加...」
または
タスクトレイのアイコンを右クリック→「RSS追加...」

RSSのURLを入力し、OKを選択します。URL↓

http://oshiete1.goo.ne.jp/rss/oshiete_goo.xml

参考URL:http://glucose.jp/

Qリフレクション 可変長引数メソッドの取得

リフレクションで、(1)の方のメソッドインスタンスを得たいとき、どういった方法が考えられますか?

//JDK 6.0

public Hoge {
void method1(String str, Object ...objs){}//(1)
void method1(String str, String str2){}//(2)
}

Hoge hoge = new Hoge();
Class c = hoge.getClass();
Method m12 = c.getMethod("method", String.class, String.class);
Method m11 = c.getMethod("method", ?? );

Aベストアンサー

No1.です、連投ですみません。
回答書いてる途中で、HogeクラスですでにObject配列がオーバーロードしている環境でObjectの可変長引数を定義したら、どうなるのか気になったので手元の環境で確認してみました。結論としては「先方の定義は有効で後方の定義部分で文法エラーが発生する。」みたいです。

↓が確認したソース
import java.lang.reflect.Method;

public class Hoge {
public Hoge() {
}
public void method1(String str, Object[] obj){
System.out.println("CC");
}
//↓の部分ですでに定義されているという文法エラー
public void method1(String str, Object ...objs){
System.out.println("AA");
}
public void method1(String str, String str2){
System.out.println("BB");
}
public static void main(String[] args) throws Exception{
Hoge hoge = new Hoge();
Class c = hoge.getClass();
Method m12 = c.getMethod("method1", String.class, String.class);
Method m11 = c.getMethod("method1", String.class,Object[].class );
m11.invoke(hoge,new Object[]{"",new Object[0]});
}
}

環境 NetBeans 5.0 で確認

あと最後にリフレクションでメソッドの呼び出し引数の型の定義方法が分からない場合はClass#getDeclaredMethodsで全てのメソッドを取得しての該当のメソッドの parameterTyps を調査すれば分かります。

No1.です、連投ですみません。
回答書いてる途中で、HogeクラスですでにObject配列がオーバーロードしている環境でObjectの可変長引数を定義したら、どうなるのか気になったので手元の環境で確認してみました。結論としては「先方の定義は有効で後方の定義部分で文法エラーが発生する。」みたいです。

↓が確認したソース
import java.lang.reflect.Method;

public class Hoge {
public Hoge() {
}
public void method1(String str, Object[] obj){
System.out.println("CC");
...続きを読む


人気Q&Aランキング

おすすめ情報