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

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

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

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

Q&A

解決済

2回答

1268閲覧

java メソッドのオーバーロード

kimura

総合スコア59

Java

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

0グッド

0クリップ

投稿2015/09/14 14:19

package ex2;

public class ChipSet {
private int c10; //10点のチップの枚数
private int c1; //1点のチップの枚数
public ChipSet(int c10, int c1){ //コンストラクタ
this.c10 = c10;
this.c1 = c1;
}
public void change(int c10, int c1){
this.c10 += c10;
this.c1 = c1;
}
public void change(int p){
c10 += p / 10;
c1 += p % 10;
}
/総額を表す文字列を返す/
public String toString() { return "総額:" +(c10 * 10 + c1);}
}

package ex2;

public class Execx {

public static void main(String[] args) { ChipSet cs = new ChipSet(0, 0); cs.change(1, 1); System.out.println(cs); cs.change(15); System.out.println(cs); }

}

実行結果
総額:11
総額:26

初心者ですのでわかりにくいと思いますが宜しくお願いします。
上記は参考書の例題です。
実行結果が11になるのは分かります。
ですが、26になるのが分かりません。
p=15になりますが、c10 += p / 10; は、c10=c10+15/10 になり、c10=c10+1?
c1 += p % 10; も同じく計算が分からなくなって・・・
で何故26になるのかさっぱり分かりません。
大変お手数ですが、ご指導していただけますと助かります。
何卒宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

change(int p)の中でやっているのは、
c10 += p / 10は、10で割って余りは捨てた数をc10に加算しています。
c1 += p % 10は、10で割った余りc1に加算しています。
つまり、15は10点×1枚, 1点×5枚なのでそのように計算しています。

数でいうと単に15を足しているだけで、11+15=26になります。

投稿2015/09/14 14:40

argius

総合スコア9390

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

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

kimura

2015/09/14 14:43

回答ありがとうございます。 11は public void change(int c10, int c1){ this.c10 += c10; this.c1 = c1;} これですか?
argius

2015/09/14 14:44

そうです。 引数を2つ指定したときはそちらが呼ばれ、引数を1つ指定したときはchange(int p)が呼ばれます。それがオーバーロードです。
kimura

2015/09/14 14:56

いまいち分かってないので逆にしてみました。 cs.change(15); System.out.println(cs); cs.change(1, 1); System.out.println(cs); 実行結果 総額:15 総額:21 もっと計算が分からなくなりました。 すいません。もう一度逆のパターンでも教えていただけませんか 宜しくお願い致します
swordone

2015/09/14 15:05

public void change(int c10, int c1){ this.c10 += c10; this.c1 = c1; } ここのthis.c1 = c1;はthis.c1 += c1;であるべきでは?
argius

2015/09/14 15:07

change(int c10, int c1)のほう、良く見たら、 this.c1 = c1; になってますね。 これは this.c1 += c1 の間違いなのでは? この前提で言うと、 cs.change(15)のとき、 p / 10 が 1、p % 10 が 5 になるので、 それぞれ c10 += 1, c1 += 5 となります。 c10もc1も最初は0なので、c10 は 1, c1 は 5 になります。 cs.change(1, 1)のとき、 それぞれ c10 += 1, c1 += 1 となります。 加算する前の c10 は 1 、c1は 5 なので、 c10 に 1を加算して 2、c1は 1 を加算して 6になります。 こちらも 26 になるのが正しいと思います。
kimura

2015/09/14 15:08

ホントです 本を見返したら+=でした
kimura

2015/09/14 15:10

実行結果 総額:15 総額:26 になりました。 大変勉強になりました。 ありがとうございました
guest

0

初めまして。回答させていただきます。間違っていたら申し訳ありません
P = 15 です
public void change(int p){
c10 += p / 10;
c1 += p % 10;
}

c10 = c10 + 15 ÷ 10
= 1 + 15 ÷ 10
= 2
c1 = 1 + mod(15,10)
= 1 + 5
= 6

です。
modはあまりを出す関数です。
上記を
public String toString() { return "総額:" +(c10 * 10 + c1);}
に入れて
総額: 2×10 + 6
: 26
というかんじですかね。
public classなので変数(c10,c1)が初期化されないのではないでしょうか。

投稿2015/09/14 14:42

kpiyohiko

総合スコア658

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

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

kimura

2015/09/14 14:57

回答ありがとうございます。 少し分かったような気がしたのですが、いまいち分かってないので逆にしてみました。 cs.change(15); System.out.println(cs); cs.change(1, 1); System.out.println(cs); 実行結果 総額:15 総額:21 もっと計算が分からなくなりました。 すいません。もう一度逆のパターンでも教えていただけませんか 宜しくお願い致します
kimura

2015/09/14 15:11

回答ありがとうございました。 ベストアンサーにせず申し訳ありません 勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問