C#の配列について

このQ&Aのポイント
  • C#の配列についてジャンケンゲームの作成に取り組んでいます。
  • ユーザーの入力した数値に対して出す手を1:グー2:チョキ3:パーという形にしたいのですが、0:グー1:チョキ2:パーという形になってしまいます。
  • コンピューターの出す手も1~3ではなく0~2しか出さない状況で、どなたか修正方法を教えて頂けないでしょうか?
回答を見る
  • ベストアンサー

C#の配列について

0回答 C#の配列について 現在C#のジャンケンゲームの作成に取り組んでいます。 ユーザーの入力した数値に対して出す手を 1:グー2:チョキ3:パー という形にしたいのですが 0:グー1:チョキ2:パー という形になってしまいます。 コンピューターの出す手も 1~3ではなく0~2しか出さない状況で、どなたか修正方法を教えて頂けないでしょうか? 【ソースコード】 //コンピュータと自分の入力した手を判別するメソッド static void Janken(ref string myHand) { // Random クラスの新しいインスタンスを生成する Random ran = new System.Random(); //コンピュータの出す手を1以上3以下に設定する。 string[] com = new string[] { "1", "2", "3" }; string con = ran.Next(3).ToString(); //配列型、変数teに出す名前を設定 string[] te = { "グー", "チョキ", "パー" };

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

オリジンか。。(これをオリジンって言う) string[] te = { "グー", "チョキ", "パー" }; これが、0,1,2という3個の配列になっている。 しかし、 string[] com = new string[] { "1", "2", "3" }; これは、 0,1,2に(string)1,2,3が入っているので混乱してるだけ。 string[] com = new string[] { "1", "2", "3" }; これを削除して構わない! 乱数から得られる数字は、あくまで0~2として、 「表示の時に+1」して出せば、全部解決しますよ。 事前に+1してしまうと、配列は0から始まるので、 {ゴミ,1,2,3}と余計なものが必要になりメモリの無駄で、 バグの原因にしかならないので。 ひとまず、「数字は常に0で始まる!」を ベースに考えると今回の件だけじゃなく、 以後の件で、あなたの力になってくれますよ!

関連するQ&A

  • C#のループについて

    現在C#でジャンケンゲームの課題に取り組んでいるのですが、ループ処理や各メソッドに対しての変数にエラーがでてしまい、修正方法が分からず、どなたか教えて頂けないでしょうか? ・ユーザはグー、チョキ、パーをそれぞれ1、2、3の数字で入力する。 ・CPUは乱数を使って出す手を選ぶ。 ・5回勝負として、人間とコンピュータの勝った回数を数え、勝敗がつくたびに1回ずつ表示する。    あいこは決着がつくまで再勝負。途中でどちらかが3勝しても、5回最後まで勝負を続ける。   ・指定された範囲以外の値を入力したら負けにする 【実行例】  ユーザ名を入力してください:goto  手を入力してください(グー1、チョキ2、パー3): 1  CPU:チョキ  WIN  goto:1勝、CPU:0勝    手を入力してください(グー1、チョキ2、パー3): 3  CPU:パー  DRAW    手を入力してください(グー1、チョキ2、パー3): 3  CPU:チョキ  LOSE  goto:1勝、CPU:1勝    手を入力してください(グー1、チョキ2、パー3): 0  LOSE(反則負け)  goto:1勝、CPU:2勝    (中略)    goto:3勝、CPU:2勝  gotoさんの総合勝利です! using System; namespace Ensyuu007 { static class Program { static string? Myhand; static int CntWin = 0; //勝利回数 static int CntLose = 0; //敗北回数 static int CntDraw = 0; //引分回数 //ユーザー名の入力 static void Main(string[] args) { string EnterName = Console.ReadLine(); Console.WriteLine("ユーザ名を入力してください: {0}", EnterName); Console.ReadLine(); } //じゃんけんを5回行います。 for (int GameCnt = 0; GameCnt <= 5; GameCnt++) { //正しく入力されたかチェックを行うメソッド。 static string Check(ref string Myhand) { static = Console.ReadLine(); Console.WriteLine("手を入力してください(グー1、チョキ2、パー3):{0}", Myhand); //正しく入力されたかチェックします。 Check(ref Myhand); //0,1,2が入力された場合 if (Myhand.Equals("1") || Myhand.Equals("2") || Myhand.Equals("3")) { //入力した数字をそのまま返します。 return Myhand; } //1,2,3以外が入力された場合 else { Console.WriteLine("LOSE(反則負け)"); return Myhand; } } //じゃんけんを開始するメソッド。 static void Start() { //コンピューターとじゃんけんさせます。 Janken(ref Myhand); Console.ReadLine(); } //コンピュータと自分の入力した手を判別するメソッド static void Janken(ref string Myhand) { // Random クラスの新しいインスタンスを生成する Random ran = new System.Random(); //コンピュータの出す手を1以上3以下に設定する。 string[] com = new string[] { "1", "2", "3" }; string con = ran.Next(3).ToString(); //配列型、変数teに出す名前を設定 string[] te = { "グー", "チョキ", "パー" }; //コンピュータが勝利した場合 if (((Myhand == "1") && (con == "3")) || ((Myhand == "2") && (con == "1")) || ((Myhand == "3") && (con == "0"))) { Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand))); Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con))); Console.WriteLine("LOSE"); CntLose++; //敗北回数に加算 } //自分が勝利した場合 else if (((Myhand == "1") && (con == "2")) || ((Myhand == "2") && (con == "3")) || ((Myhand == "3") && (con == "1"))) { Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand))); Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con))); Console.WriteLine("WIN"); CntWin++; //勝利回数に加算 } //あいこだった場合 else { Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand))); Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con))); Console.WriteLine("DRAW"); CntDraw++; //引分回数に加算 } } } static void Resurut() { if (CntWin > CntLose) { Console.WriteLine("総合勝利です"); } else if (CntLose < CntWin) { Console.WriteLine("CPUの総合勝利です"); }

  • どこに・・・

    import java.io.*; class janken { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("あなたの手を入力して下さい。(1:グー、2:チョキ、3:パー)?\n"); String str = br.readLine(); int a = Integer.parseInt(str); switch(a){ case 1: System.out.println("あなたの手はグーです。"); break; case 2: System.out.println("あなたの手はチョキです。"); break; case 3: System.out.println("あなたの手はパーです。"); break; default: System.out.println("1~3を入力してください。"); break; } { int ran = ((int)(Math.random()*3)+1); int b=ran; switch(b){ case 1: System.out.println("コンピュータの手はグーです。"); break; case 2: System.out.println("コンピュータの手はチョキです。"); break; case 3: System.out.println("コンピュータの手はパーです。"); break; } int c; c=a-b; if(c == 2){ System.out.println("勝ち"); } else if(c== -1){ System.out.println("勝ち"); } else if(c==0){ System.out.println("あいこ"); } else if(c==1){ System.out.println("負け"); } else { System.out.println("負け"); } } } } いまjavaの勉強をしており、練習をかてね上のようにじゃんけんのプログラムを書きました。今の段階で、一様動くのですが、一回ごとにじゃんけんが終了されてしまいます。そこで繰り返し文のwhile(a != x)を使って数値を入力したら終了するように考えているんですが、whileをどこに入れたらいいのかがわかりません・・・ 自分でいろんなところに入れて試して見たんですが、無限ループになったりして、終了してくれません。どこにwhileを入れたらいいのでしょうか?それてもwhileじゃないほうがいいのでしょうか?アドバイスお願いします。

    • ベストアンサー
    • Java
  • C言語について

    C言語のじゃんけんゲームを作成したいのですが、 仕様は 1.利用者とコンピュータによる対戦形式とします。 2.利用者がキーボードから入力した手(グー・チョキ・パー)と、擬似乱数を用いて生成したコンピュータの手を比較し、利用者の勝ち・あいこ・負けの結果を表示しなさい。 3.利用者の入力が不正の場合には再度入力を促すなど、適切な処理をしなさい。 4.これまでの累積勝利数・引き分け数・敗北数をそれぞれ、user_win・user_draw・user_loseの3つの変数(int型)に格納しなさい。 5.連勝中の場合は「5連勝中!」などと表示させるようにしなさい。 6.あいこである限りは自動的にじゃんけんを反復しなさい。 7.勝敗がついた場合、利用者にまだ継続するか質問した上で、じゃんけんを反復させなさい。 8.じゃんけんを終了した場合、これまでの通算成績として、累積勝利数・引き分け数・敗北数のほか、勝利=累積勝利数÷(累積勝利数+累積敗北数)×100、および、最大勝利数を計算して表示しなさい。 という仕様のじゃんけんゲームを作成したいのですが、下記に書いているまでしかできません。誰か教えていただけないでしょうか。分からなくて困っています。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int a,c; srand(time(NULL)); c = rand()%3+1; printf("手を入力してください [1:グー 2:チョキ 3:パー] "); scanf("%d",&a); if(a==1 && c==1) printf("あなたはグーで、私もグーでした。アイコです。\n"); else if(a==1 && c==2) printf("あなたはグーで、私はチョキでした。あなたの勝ちです。\n"); else if(a==1 && c==3) printf("あなたはグーで、私はパーでした。あなたの負けです。\n"); else if(a==2 && c==1) printf("あなたはチョキで、私はグーでした。あなたの負けです。\n"); else if(a==2 && c==2) printf("あなたはチョキで、私もチョキでした。アイコです。\n"); else if(a==2 && c==3) printf("あなたはチョキで、私はパーでした。あなたの勝ちです。\n"); else if(a==3 && c==1) printf("あなたはパーで、私はグーでした。あなたの勝ちです。\n"); else if(a==3 && c==2) printf("あなたはパーで、私はチョキでした。あなたの負けです。\n"); else if(a==3 && c==3) printf("あなたはパーで、私もパーでした。アイコです。\n"); else printf("正しい手を入れてください。\n"); return 0; }

  • 例外処理

    import java.io.*; class janken { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int k=0,m=0,h=0,z=0; while(true){ System.out.print("あなたの手を入力して下さい。(1:グー、2:チョキ、3:パー、0:終了)?\n"); String str = br.readLine(); int a = Integer.parseInt(str); if(a == 0){ break; } z++; switch(a){ case 1: System.out.println("あなたの手はグーです。"); break; case 2: System.out.println("あなたの手はチョキです。"); break; case 3: System.out.println("あなたの手はパーです。"); break; default: System.out.println("1~3を入力してください。"); break; } { int ran = ((int)(Math.random()*3)+1); int b=ran; switch(b){ case 1: System.out.println("コンピュータの手はグーです。"); break; case 2: System.out.println("コンピュータの手はチョキです。"); break; case 3: System.out.println("コンピュータの手はパーです。"); break; } int c; c=a-b; if(c == 2){ System.out.println("あなたの勝ちです。"); k++; } else if(c== -1){ System.out.println("あなたの勝ちです。"); k++; } else if(c==0){ System.out.println("あいこです。"); h++; } else if(c==1){ System.out.println("コンピュータの勝ちです。"); m++; } else { System.out.println("コンピュータの勝ちです。"); m++; } } } System.out.println("じゃんけん終了。"); System.out.println("あなたは"+z+"試合中、"+k+"勝"+m+"敗"+h+"分けです"); } } このようにじゃんけんのプログラムを作りました。 しかし0~3以外の数字が入力されても、じゃんけんの勝敗を勝手に判定してしまいます・・・ try文でやってみたのですがいまいちうまくいきませんでした。 0~3を入力したら入力エラーと表示して、ふたたびユーザーの手を聞くようにしたいです。 どうすればよいかアドバイスお願いします。

    • ベストアンサー
    • Java
  • グーの次にチョキが出る確率をあるセルに求めたい

    エクセル2013のA列にグー、チョキ、パーがランダムで入力されています グーの次にチョキが出る確率をあるセルに求めたいのですがどうすればいいですか? また、グー、チョキと並んでる場合の次の行がパーである確率も求めたいのですが お願いいたします

  • JSP/Servletのパラメータの受け渡しが文字化けしてうまくいきません。

    JSP・Servlet・Beanがうまくいかなくて困っています。開発環境はWindowsXP JDK5とEclipse3.2とTomcat5.5を使って作っています。 じゃんけんをするゲームを作ったのですが、コンピュータの手は文字列も画像もきちんと出るのですが、自分の手が文字列は文字化けして画像も正しく表示されません。 JSPのcharsetやServletのrequest.setCharacterEncoding()メソッドなど文字化け等で考えられることはいろいろ調べてやってみたつもりなのですがどうもうまくいきません。コンソールに値を出力するようにしてデバックもやってみてはいるのですが、同様に文字化けした値が入ってしまいます。どなたかご教授下さい。以下にソースを書きます。 <!--JankenStart.jsp--> <%@page language="java" import="java.lang.*, java.util.*" contentType="text/html; charset=Shift_JIS"%> <html> <head><title>じゃんけんゲーム</title></head> <body> <h2>このゲームはコンピュータとじゃんけんをします!<br> コンピュータに勝てるかな?</h2> <form action="../JankenAction"> あなたの手: <input type="radio" name="te1" value="グー">グー<img src="../img/hand4-1-3.gif"> <input type="radio" name="te1" value="チョキ">チョキ<img src="../img/hand4-1-1.gif"> <input type="radio" name="te1" value="パー">パー<img src="../img/hand4-1-2.gif"><p> <center><input type="submit" value="勝負"></center> </body> //JankenAction.java package servlets; import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import beans.JankenBean; public class JankenAction extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{  request.setCharacterEncoding("Windows-31J");  response.setCharacterEncoding("Windows-31J");   String te=request.getParameter("te1");   JankenBean jankenBean=new JankenBean();   jankenBean.setJibun(te);   jankenBean.setComputer();   jankenBean.setHantei();   request.setAttribute("hoge", jankenBean);   RequestDispatcher rDispatcher=request.getRequestDispatcher("JSP/JankenKekka.jsp");   rDispatcher.forward(request, response); } } //JankenBean.java package beans; public class JankenBean { private String computer=null;private String jibun=null; private String hantei=null; private String jgazou=null; private String cgazou=null; public String getComputer(){ return computer; } public String getCgazou(){ return cgazou; } public void setComputer(){ int random =(int)(Math.random()*3); if(random==0){ System.out.println("グー"); computer="グー"; cgazou="img/hand4-1-3.gif"; } else if(random==1){ System.out.println("チョキ"); computer="チョキ"; cgazou="img/hand4-1-1.gif"; }else{ System.out.println("パー"); computer="パー"; cgazou="img/hand4-1-2.gif"; } System.out.println("computer"+computer); } public String getJibun(){ return jibun; } public String getJgazou(){ return jgazou; } public void setJibun(String te){ jibun=te; if(jibun.equals("グー")){ jgazou="img/hand4-1-3.gif"; } else if(jibun.equals("チョキ")){ jgazou="img/hand4-1-1.gif"; }else{ jgazou="img/hand4-1-2.gif"; } System.out.println("jibun"+jibun); } public String getHantei(){ return hantei; } public void setHantei(){ String hantei2=""; if( (computer.equals("グー"))&&(jibun.equals("チョキ"))||(computer.equals("チョキ"))&&(jibun.equals("パー"))||(computer.equals("パー"))&&(jibun.equals("グー")) ){ System.out.println("コンピュータの勝ち"); hantei2="コンピュータの勝ち"; }   else if( (computer.equals("グー"))&&(jibun.equals("パー"))     ||(computer.equals("チョキ"))&&(jibun.equals("グー"))     ||(computer.equals("パー"))&&(jibun.equals("チョキ")) ){ System.out.println("あなたの勝ち"); hantei2="あなたの勝ち"; }else{ System.out.println("あいこ"); hantei2="あいこ"; } hantei=hantei2; } }

  • 10回じゃんけんの確率計算

    モバゲーにて、10回じゃんけんを同時にして合計6勝以上したら、景品がもらえるという遊びがはやっています。 そこで6勝以上する確率の計算法もしくは、6勝以上する確立を教えていただけないでしょうか? 相手「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」 自分「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「パー」「グー」 このように10回じゃんけんを一度に出し、合計の勝利数で決まります。二人同時に手をだします。 この例だと、自分が6勝です。 あいこは、勝ちには入りませんので、負けと同じ扱いです。 説明不十分かと思いますので、対戦例を2点かきます。 相手「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」 自分「グー」「チョキ」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「パー」「グー」 ↑これは、自分が、5勝です。 相手「グー」「グー」「グー」「グー」「グー」「グー」「グー」「グー」「グー」「グー」 自分「パー」「パー」「パー」「パー」「パー」「パー」「パー」「パー」「パー」「パー」 ↑これは自分が10勝です。 じゃんけんの手は、二人とも、同時に10手だします。6連勝じゃなく、負けても、何度目で勝ってもいいので、6回以上かてた時の確率を知りたいです。

  • C#の数値の出力について

    下記のコードで cntLose の変数の数値を、コンソールに出力したいのですが、やり方が分からず、どなたか教えて頂けないでしょうか? 【ソースコード】 static class Program { static string userName; static int cntWin = 0; //勝利回数 static int cntLose = 0; //敗北回数 static int cntDraw = 0; //引分回数 //ユーザー名の入力 static void Main(string[] args) { string enterName = Console.ReadLine(); Console.WriteLine("ユーザ名を入力してください: {0}", enterName); userName = enterName; Start(); Resurut(); } static void Janken(ref string myHand) { // Random クラスの新しいインスタンスを生成する Random ran = new System.Random(); //コンピュータの出す手を1以上3以下に設定する。 string[] com = new string[] { "1", "2", "3" }; string con = com[ran.Next(3)]; //コンピュータが勝利した場合 if (((myHand == "1") && (con == "3")) || ((myHand == "2") && (con == "1")) || ((myHand == "3") && (con == "2"))) { Console.WriteLine("LOSE"); cntLose++; //敗北回数に加算 Console.WriteLine("{0}:cntWin勝、CPU:cntLose勝", userName); }

  • pの出す手の確率→グー:チョキ:パー=1/2:1/

    pの出す手の確率→グー:チョキ:パー=1/2:1/4:1/3qの出す手の確率→グー:チョキ:パー=1/4:1/3:1/4 (1)2回じゃんけんしてqがグーで勝つ確率 (2)4回じゃんけんしてpがパーかチョキで勝つ確率 教えてくださいm(_ _)m

  • センター数学 模試 確率

     センター試験 数IAの模擬試験の復習をしていて、確率の問題でわからない箇所があったので教えてください。  A、B, C, Dの4人が1回だけじゃんけんをする。4人がグー、チョキ、パーを出す確率はそれぞれ等しく1/3とする。 4人の出した手がグー、チョキ、パーの3種類すべてある確率を求めよ。 私は、4人の中から、グー、チョキ、パーを出す3人をまず選んで、その中で誰がどの手を出すかを考え、残った1人は3通りのての出し方があるので  4C3 × 3!× 3=72 通り として確率を出しました。しかし、解答は、4人を2人、1人、1人に分ける組み合わせの数は、4C2=6通り で、その各々に対して、手の出し方は3!=6通りだから、 6×6=36通り として確率を求めています。 解答を読めば、「そうだな」と思うのですが、私の考え方のどこが違っていたのかがわかりません。分かる方がいたら、ご指摘お願いします。  

専門家に質問してみよう