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

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

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

912閲覧

修正困難なエラーがきました泣 どこが問題なのか一緒に探してください

RyojiAraki

総合スコア79

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2021/08/25 07:45

今起こっている問題

どこからか0の数値が出てきて、実行結果が望み通りでないものが出てきます。修正したいものの文法ミスではないため赤線で教えてくれる訳でもなく途方にくれてます。有識者さん、解が0になってしまう原因の箇所など教えてくださいm(__)m 因みに、実行場所はvisual studioです。

ソースコード

using System; using System.Linq; namespace 頭の中を整理する用 { class Program { public static double DamageCalculator(double num, double power, double dam, double dif) { Random rnd = new Random(); double totalDamage = num*power * dam / dif / 2.5* rnd.Next(80,120)/100; return Math.Round(totalDamage); } class Skill { public string Name { get; set; } public double Dam { get; set; } public double Num { get; set; } public double HitRate { get; set; } public double CriRate { get; set; } public int ActionP { get; set; } } class Status { public string Name { get; set; } public double HP { get; set; } public double Atk { get; set; } public double SpAtk { get; set; } public double Def { get; set; } public double Speed { get; set; } public string Ability{ get; set; } } static readonly Skill[] _skills = new[] { new Skill() {Name="1",Dam=1, Num=1, HitRate=1, CriRate=1, ActionP =1}, new Skill() {Name="noutenkatiwari", Dam=195, Num=1, HitRate=0.3, CriRate=0.1, ActionP =1}, new Skill() {Name="senkougiri", Dam=44, Num=3, HitRate=1, CriRate=30, ActionP =1}, new Skill() {Name="otaki", Dam=120, Num=1, HitRate=1, CriRate=0.1, ActionP =2}, }; static readonly Status[] _statuses = new[] { new Status(){Name="1",HP=1,Atk=1,SpAtk=1,Def=1,Speed=1}, new Status(){Name="Kabukizaru",HP=251,Atk=200,SpAtk=94,Def=87,Speed=106}, new Status(){Name="Businyan",HP=292,Atk=182,SpAtk=92,Def=88,Speed=162}, new Status(){Name="Kurooni",HP=458,Atk=180,SpAtk=84,Def=231,Speed=90}, new Status(){Name="Hukai",HP=362,Atk=123,SpAtk=182,Def=103,Speed=203}, new Status(){Name="Ryorar",HP=1,Atk=800,SpAtk=20,Def=1,Speed=12000}, }; public static void Main(string[] args) //ここからMainコードだお { var atkWp = _skills.Where(x => x.Name == "1").First(); var atkSt = _statuses.Where(x => x.Name == "1").First(); ; var difSt = _statuses.Where(x => x.Name == "1").First(); ; string askAtk = Console.ReadLine(); //アタッカーの質問 if ((askAtk == "カブキ猿" )|| (askAtk == "1")) { atkWp = _skills.Where(x => x.Name == "noutenkatiwari").First(); atkSt = _statuses.Where(x => x.Name == "Kabukizaru").First(); }else if ((askAtk == "ブシニャン")|| (askAtk == "2")) { atkWp = _skills.Where(x => x.Name == "senkougiri").First(); atkSt = _statuses.Where(x => x.Name == "Businyan").First(); }else if ((askAtk == "不快")||(askAtk == "3")) { atkWp = _skills.Where(x => x.Name == "otaki").First(); atkSt = _statuses.Where(x => x.Name == "Hukai").First(); } string askDif = Console.ReadLine(); //ブロッカーの質問 if((askDif == "カブキ猿")|| (askDif == "1")) { difSt = _statuses.Where(x => x.Name == "Kabukizaru").First(); }else if ((askDif == "ブシニャン") || (askDif == "2")) { difSt = _statuses.Where(x => x.Name == "Businyan").First(); }else if((askDif == "不快") || (askDif == "3")) { difSt = _statuses.Where(x => x.Name == "Hukai").First(); } //命中率計算用の変数 Random rnd2 = new Random(); Random rnd3 = new Random(); int hitCheck = 0; double hitRateCalculation = 0; //クリティカル計算 double criDamage = 0; int criNum = 0; //表記用 string whatToWrite = ""; double lowest = 1000; double highest = 0; double avaDam = 0; //施行回数の指定 int x = 500; //ダメージ計算開始 for (int j = 0; j < x; j++) { Random rnd1 = new Random(); double totalDamage = 0; for (int i = 0; i < atkWp.Num; i++) { //命中チェック hitRateCalculation = Math.Round((atkSt.Speed / difSt.Speed * rnd2.Next(60, 80) / 2 + 50) * atkWp.HitRate); if (rnd3.Next(0, 100) < hitRateCalculation) { hitCheck = 1; } else { hitCheck = 0; } //クリティカルチェック if(rnd3.Next(0,1000) < atkWp.CriRate*10) { if (atkSt.Name == "Businyan") { criDamage = 2.25; criNum += 1; } else { criDamage = 1.5; criNum += 1; } }else { criDamage = 1; } //ダメージ計算 //double intermediateDamage = atkWp.Dam * atkSt.Atk / difSt.Def / 2.5 * rnd1.Next(80, 120) / 100* hitCheck*criDamage ; double intermediateDamage=atkWp.Dam* atkSt.Atk / difSt.Def / 2.5 * rnd1.Next(80, 120) / 100 * hitCheck * criDamage; } //ダメージ計測 if (totalDamage > highest) { highest = totalDamage; } if (totalDamage < lowest) { lowest = totalDamage; } avaDam += totalDamage; //計算値出力 whatToWrite += totalDamage.ToString() + " "; } Console.WriteLine(whatToWrite); //ダメージ計算終了 //動作確認用(不要) Console.WriteLine("命中率は" + hitRateCalculation + "%です"); Console.WriteLine("クリティカル数は" + criNum + "回です"); Console.WriteLine("最高火力は"+highest+"で、最低火力は"+lowest +"でした!"); Console.WriteLine("ダメージレートは"+avaDam/x+"でした!"); Console.ReadLine(); } } }

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

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

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

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

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

K_3578

2021/08/25 07:51 編集

意図しない結果になると言うことは怪しいところにブレークポイント置いてデバッグしたらいいのでは? というか質問のタイトルは要件を簡潔に書いてください。 このタイトルだと何をしてて何のエラーが出てるのかまったくわかりません
YAmaGNZ

2021/08/25 07:48

ステップ実行してご自身のプログラムがどのように動いているのか1行づつ確認しましょう
fiveHundred

2021/08/25 07:51

このコードで何がしたいのか、望み通りの実行結果は何なのか、現状の結果が何なのか、など情報がありません。 回答者は赤の他人なので、現状ではこれらをコードから推測するしかなく、それだと負担が大きすぎます。
退会済みユーザー

退会済みユーザー

2021/08/25 07:58 編集

プログラミングのベテランでも、書いたコードが一発で正しく動くとは限りません。正しく動くようになるまでデバッグしましょう。 [超初心者でもわかるデバッグ方法] https://docs.microsoft.com/ja-jp/visualstudio/debugger/debugging-absolute-beginners?view=vs-2019&tabs=csharp ちなみに、デバッグ依頼は非推奨質問になります。 [推奨していない質問] https://teratail.com/help/avoid-asking
dodox86

2021/08/25 07:53

恐らく先のご質問でいただいていた回答を参考にして作り上げてきたのだと思いますが、コードの内容を理解されていますか?
m.ts10806

2021/08/25 08:05

タイトルには要件を記載してください。中身がありません。
m.ts10806

2021/08/25 08:06

ちなみにこのコード、自力で他人に説明できますか?
guest

回答2

0

VisualStudioを使ってるなら、ブレークポイントを設定して、コードの任意のところで実行を一時停止することができます。
そして、変数のナカミを見たりできます。
また、そこから1ステップづつ実行させ、そういうふうにコードが動くのかを見ることができます。
そうやって自分のコードをデバッグしていきましょう

投稿2021/08/25 08:03

y_waiwai

総合スコア87800

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

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

0

自己解決

お騒がせいたしました。別のコードを追加した際にtotalDamage変数更新用のコードを誤って消してしまったのが今回のエラーの原因でした。デバッグも非推奨なのは知りませんでした。利用規約見直します。

投稿2021/08/25 09:24

RyojiAraki

総合スコア79

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問