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

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

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

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

Q&A

解決済

2回答

339閲覧

じゃんけんの手の組み合わせ。

b_b_b

総合スコア32

Java

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

0グッド

0クリップ

投稿2017/10/08 04:12

###前提・実現したいこと
じゃんけんの手の組み合わせの課題でエラーが起きているのですが、
どこが間違っているのかわかりません。

入力は以下のフォーマットで与えられます。

N
a_1
a_2
...
a_N

・入力は合計で N + 1 行となり、入力値最終行の末尾に改行が1つ入ります。
・1 行目には、じゃんけんへの参加者の数を表します。
・続く N 行のうち i 行目 (1 ≦ i ≦ N) に i 番目の参加者の出した手を表す文字列 a_i が与えられます。

それぞれの値は文字列で標準入力から渡されます。

コードのどの部分が間違っているのかご教示お願い致します。

###発生している問題・エラーメッセージ
答えがdrawの時以外、間違っています。

###該当のソースコード

import java.util.*; public class Main { public static void main(String args[] ) throws Exception { Scanner sc = new Scanner(System.in); List<String> list = new ArrayList<>(); int N = sc.nextInt(); for (int i = 0; i < N; i++) { String s = sc.next(); list.add(s); } List<String> listans = new ArrayList<>(new HashSet<>(list)); Collections.sort(listans); if(listans.size() == 3){ System.out.println("draw"); }else if(listans.size() == 2){ if(listans.get(0) == "paper"){ if(listans.get(1) == "scissors"){ System.out.println("scissors"); }else{ System.out.println("paper"); } }else if(listans.get(0) == "rock"){ System.out.println("rock"); } } } }

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

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

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

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

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

guest

回答2

0

ベストアンサー

Stringは==で比較してはいけません。equalsメソッドを使います。

java

1listans.get(0).equals("paper")

全員同じ手(listans.size()==1)のときは考慮しなくていいのですか?

投稿2017/10/08 05:24

編集2017/10/08 05:27
swordone

総合スコア20649

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

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

swordone

2017/10/08 06:17

あと、ArrayListが無駄ですね。HashSetだけでできます。
guest

0

java

1import java.util.ArrayList; 2import java.util.Arrays; 3import java.util.Collections; 4import java.util.HashMap; 5import java.util.List; 6import java.util.Scanner; 7 8public class Game { 9 10 @SuppressWarnings("serial") 11 static final String[] HANDS = { "paper", "rock", "scissors" }; 12 static final List<String> LIST_HANDS = Arrays.asList(HANDS); 13 14 @SuppressWarnings("serial") 15 static final HashMap<String, String> GAMES = new HashMap<String, String>() { 16 { 17 put("paper", "draw"); 18 put("rock", "draw"); 19 put("scissors", "draw"); 20 21 put("paper,rock", "paper"); 22 put("paper,scissors", "scissors"); 23 put("rock,scissors", "rock"); 24 25 put("paper,rock,scissors", "draw"); 26 } 27 }; 28 29 public static void main(String args[]) throws Exception { 30 List<String> hands = readHands(); 31 System.out.println(showResult(hands)); 32 } 33 34 static List<String> readHands() { 35 @SuppressWarnings("resource") 36 Scanner sc = new Scanner(System.in); 37 List<String> list = new ArrayList<>(); 38 final int num = sc.nextInt(); 39 int count = 0; 40 while (count < num) { 41 String s = sc.next(); 42 if (!Arrays.asList(HANDS).contains(s)) { 43 System.out.println("Bad data: " + s); 44 continue; 45 } 46 if (!list.contains(s)) { 47 list.add(s); 48 } 49 count++; 50 } 51 return list; 52 } 53 54 static String showResult(List<String> hands) { 55 Collections.sort(hands); 56 String result = GAMES.get(String.join(",", hands)); 57 if (result == null) { 58 result = "illegal hand"; 59 } 60 return result; 61 } 62}

勝敗の判定を、条件文で決めていくのではなく、 データ文を検索することで取得するようにしてみました。

投稿2017/10/08 12:54

katoy

総合スコア22324

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

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

swordone

2017/10/08 12:57

それ(わざわざcontainsで調べてから入れる)だったらListでなくてSetでいいのでは
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問