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

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

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

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

Q&A

解決済

1回答

381閲覧

interfaceにおける問題について質問があります。

max-777

総合スコア17

Java

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

0グッド

0クリップ

投稿2020/09/08 02:04

編集2020/09/08 03:10

java

1interface MyInter{ 2 public static final int VAL=3; 3 void foo(int s); 4} 5public class Test implements MyInter{ 6 public static void main(String[]args){ 7 int x=5; 8 new Test().foo(++x); 9 } 10 public void foo(int s){ 11 s += VAL + ++s; 12 System.out.prinln("s:"+ s); 13 } 14}

上記の通りに出力したところ、s:16が出力されました。VALはfinalなので、値は変わらずに3ということは理解しております。
出力表示を逆算的に考えたときに、++s;は13となると思います(確信的ではないですが...)。仮に13という数値が正しければ、そこに至る過程を知りたいです。そうでなければ、一から丁寧に教えていただければ、幸いです。

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

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

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

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

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

swordone

2020/09/08 02:19

fooに渡しているxは宣言されていないので、コンパイルエラーです。
max-777

2020/09/08 02:22

問題集で確認したところ、コンパイルエラーにはなっていませんでした…
quickquip

2020/09/08 02:31 編集

本当に間違えなく実行したコードを貼り付けていますか? と暗に言われているのです…… セミコロンが1箇所足りないようですし、他にも間違いがあります。
max-777

2020/09/08 02:34

確かに、コードを実行したところ、エラーになりました。しかしながら、問題集では選択肢にコンパイルエラーはあるのですが、解答はs:16が記述されております。
maisumakun

2020/09/08 02:37

「S」も定義がないですね。
quickquip

2020/09/08 02:44

こういう感じなんだろうな、と直していくと確かに16が出力されましたね。問題は「S:16が出力されました」と質問に書いたことですね。
max-777

2020/09/08 02:52

セミコロンの修正は完了致しました。他に問題集と異なる箇所はありませんでした。 >こういう感じなんだろうな、と直していくと確かに16が出力されましたね。 具体的に教えてもらうことは可能ですか。
quickquip

2020/09/08 02:58 編集

すでに書かれています。(swordoneさんと maisumakunさんが指摘してくれています)
max-777

2020/09/08 02:57

それはx,sが宣言されていないことを意味しますか?
maisumakun

2020/09/08 03:00

意味しません。Javaでは、sとSは別物です。
max-777

2020/09/08 03:11

小文字にすることを忘れていました。
kazuma-s

2020/09/08 05:21

> System.out.prinln("s:"+ s); prinln でコンパイルエラーになります。
guest

回答1

0

ベストアンサー

++s;は13となると思います

違います。

s += VAL + ++s;

上記はざっくり言うと、sVAL++s(sをインクリメントした値)を加算しているので、実際には。

s = s + VAL + 1 + s;

と同義になります。
最終的にs=16となりましたが、この行実行時点でs=6となっているため、
s = 6 + 3 + 1 + 6となり16になります。

投稿2020/09/08 02:35

nekoniki

総合スコア2411

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

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

max-777

2020/09/08 02:47

回答ありがとうございます。どのような過程でs:16になったのかを理解できました。一方でこのソースコードを実行したところ、エラーになります。一方で、問題集ではコンパイルエラーの選択肢はありますが、解答はs:16と記述されております。一体何が異なるのでしょうか?
nekoniki

2020/09/08 02:56

読解力がなくて申し訳ないです。 > 一方でこのソースコードを実行したところ、エラーになります。 こちらはおそらく質問に対するコメントでやりとりされているようなので割愛しますが、 > 解答はs:16と記述されております。一体何が異なるのでしょうか? これは、実行した結果が現在「s:16」となっておらず、その原因を探りたいということでよろしいですか? だとすれば、「s:16」とならない場合の出力結果を提示いただきたいです。
max-777

2020/09/08 03:05

こちらこそ申し訳ございません。私の説明不足でした。問題集では解答がs:16と記述されており、その理由は貴方様が説明した通り、納得することができました。しかしながら、他の回答者様から「x.sが宣言されていないから、コンパイルエラーになる。」という指摘を頂き、ソースコードを実行したところ、 シンボルを見つけられません シンボル: 変数 x 場所: クラス Test シンボルを見つけられません シンボル: 変数 S 場所: クラス Test 上記の通り、コンパイルエラーになってしまいました。疑問に感じたのは、なぜ問題集のソースコードを実行したのに、エラーになるのかということです。 文章が稚拙で申し訳ございません。
max-777

2020/09/08 04:48 編集

すいません、私の勘違いでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問