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

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

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

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

Q&A

解決済

2回答

1597閲覧

javaの戻り値が反映されていない?

Shiho.

総合スコア11

Java

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

0グッド

0クリップ

投稿2019/06/03 05:09

編集2019/06/03 06:09

前提・実現したいこと

初めて質問させていただきます。
javaでじゃんけんをするシステムを作っています。
3回勝負にしようとして、numという変数に勝ちなら+1、負けなら−1をすることで、三回勝負が終わった後に最終結果を表示したいのですが、何度試しても引き分けと出ます。
最初に代入した0からmethod内の処理がなされていないのでしょうか?
どのようにしたら反映されるようになるでしょうか?

該当のソースコード

java

1public class task{ 2 public static void main(String[] args){ 3 String[] a ={"グー","チョキ","パー"}; 4 System.out.println("じゃんけん、3回勝負です"); 5 int count = 0; 6 while(count < 3){ 7 System.out.println("1.グー, 2.チョキ, 3.パー"); 8 int i = new java.util.Scanner(System.in).nextInt(); 9 int Y = i - 1; 10 System.out.println("あなたは" + a[Y]); 11 int P = new java.util.Random().nextInt(3); 12 System.out.println("PCは" + a[P]); 13 int num += janken(Y,P); 14 count++; 15 if(count >= 3){ 16 System.out.println("3回勝負の結果"); 17 if(num == 0){ 18 System.out.println("引き分け"); 19 }else if(num < 0){ 20 System.out.println("PCの勝ち"); 21 }else if(num > 0){ 22 System.out.println("あなたの勝ち"); 23 } 24 } 25 } 26 } 27 public static int janken(int Y,int P){ 28 if(Y == P){ 29 System.out.println("あいこ"); 30 }else if((Y == 0 && P == 1)||(Y == 1 && P == 2)||(Y == 2 && P == 0)){ 31 System.out.println("あなたの勝ち"); 32 return 1; 33 }else if((P == 0 && Y == 1)||(P == 1 && Y == 2)||(P == 2 && Y == 0)){ 34 System.out.println("PCの勝ち"); 35 return -1; 36 } 37 } 38} 39 40

試したこと

java:13: エラー: ';'がありません
int num += janken(Y,P);
^
エラー1個

と出てしまいます。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

int mun = janken(Y,P,num);

int num = janken(Y,P,num);
の誤りではないですか。munはどこも参照していません。
また、その場合、int num = 0; が不要になります。

投稿2019/06/03 05:12

編集2019/06/03 07:10
dsuzuki

総合スコア1682

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

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

LouiS0616

2019/06/03 05:14

同名の変数の最宣言はできないように思います。 やるなら num =janken(Y, P, num); です。
guest

0

ベストアンサー

Java

int mun = janken(Y,P,num);

返り値をせっかく受け取っているんですから、munを判定に用いるようにして下さい。


そもそも引数numなんて要らないのです。仮引数への再代入は実引数には一切影響しません。

Java

1static int janken(int y, int p) { 2 if(yの勝ち) return 1; 3 if(pの勝ち) return -1; 4 5 return 0; 6}

返り値を元のnumに足していけば良いです。
単一責任の原則を踏まえ、jankenメソッドは単にその場の勝敗だけ判定するようにすべきです。

投稿2019/06/03 05:13

編集2019/06/03 05:25
LouiS0616

総合スコア35660

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

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

dice142

2019/06/03 05:21 編集

> そもそもnumなんて要らないのです。 質問文を読むと 3回連続で勝ったら+3、3回連続で負けたら-3 のようにしていきたいのかなという風に見えました。 なので、numは必要だけど宣言位置がおかしいって感じでしょうか。
LouiS0616

2019/06/03 05:22

引数numが不要という意味で書きました。語弊があるので修正しておきます。
LouiS0616

2019/06/03 05:24

同時に私の問題誤読にも気付けました。 コメントありがとうございます。
Shiho.

2019/06/03 05:46

戻り値を元のnumに足すにはどうしたら良いのでしょうか? メインメソッドでの宣言がわからないです...
LouiS0616

2019/06/03 05:50

num += janken(y, p); で充分です。
Shiho.

2019/06/03 05:54

度々申し訳ないです。 エラー: ';'がありません と出るのですがなぜでしょうか
LouiS0616

2019/06/03 05:56

どこかセミコロンが抜けています。 エラー行も表示されている筈なので、その前後を確認してみて下さい。
Shiho.

2019/06/03 06:01

エラー行には;をつけています。 全ての行を確認しましたが;の抜けはないように思うのですが...
LouiS0616

2019/06/03 06:03

該当のコードが無いと何とも言えません。 行末のセミコロンをやはり見落としていたり、for文のセパレータが抜けていたり、見ているコードとコンパイルしているコードが違ったり、何かしらミスがある筈です。
Shiho.

2019/06/03 06:10

質問を編集しました。 書き直した部分のどこかがおかしいのでしょうか?
LouiS0616

2019/06/03 06:13

複合代入文(+=など)は宣言文と一緒には書けません。 whileループに入るより前に int num = 0; とでもしておいて、ジャンケンをするごとに num += janken(Y, P); として下さい。
LouiS0616

2019/06/03 06:14 編集

ここで『そういうルールなのか』で終わってしまうと勿体ないので、 なぜ int num += ほにゃらら; と書くことができないのか考えてみても勉強になるでしょう。
Shiho.

2019/06/03 12:18

解決しました! 丁寧なご指導本当に助かりました。 ありがとうございました! これから一層勉強しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問