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

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

ただいまの
回答率

88.92%

なぜ-1を代入するのかわからない

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,329

FujiharaK

score 11

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GradeCheck
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
labelResultM.Text = "ちゃんだい";
labelResultP.Text = "たくちゃん";
labelResultE.Text = "しんちゃん";
labelCompAvgM.Text = "和樹";
labelCompAvgP.Text = "さっきーなぁ";
labelCompAvgE.Text = "組長";

}

private void textBoxAttendanceM_TextChanged(object sender, EventArgs e)
{

}

private void textBoxAttenDanceP_TextChanged(object sender, EventArgs e)
{

}

private void textBoxScoreM_TextChanged(object sender, EventArgs e)
{

}

private void buttonJudge_Click(object sender, EventArgs e)
{

//出席率を浮動小数点値に変換

double AttendanceM, AttendanceP, AttendanceE;

textToValue(textBoxAttendanceM.Text, out AttendanceM);

textToValue(textBoxAttendanceP.Text, out AttendanceP);

textToValue(textBoxAttendanceE.Text, out AttendanceE);

//点数を整数値に変換

int scoreM, scoreP, scoreE;

textToValue(textBoxScoreM.Text, out scoreM);

textToValue(textBoxScoreP.Text, out scoreP);

textToValue(textBoxScoreE.Text, out scoreE);

//点数を判定する

labelResultM.Text = scoreJudge(AttendanceM, scoreM);

labelResultP.Text = scoreJudge(AttendanceP, scoreP);

labelResultE.Text = scoreJudge(AttendanceE, scoreE);

//平均値以上か未満か判定する

labelCompAvgM.Text = averageJudge(scoreM, 1);

labelCompAvgP.Text = averageJudge(scoreP, 2);

labelCompAvgE.Text = averageJudge(scoreE, 3);
}
//テキストを浮動小数点値に変換
//(仮引数) text : 変換する文字列 val : 変換した浮動小数点値
//(返却値) なし
private void textToValue(String text, out double val)
{
if (double.TryParse(text, out val) == false)

val = -1.0;
}

//テキストを整数値に変換
//(仮引数)text : 変換する文字列 val : 変換した整数値
//(返却値)なし
private void textToValue(string text, out int val)
{
if (int.TryParse(text, out val) == false)

val = -1;
}
//成績判定
//(仮引数) Attendance : 出席率 score : 得点
//(返却値) 判定結果

private string scoreJudge(double Attendance, int score)
{
string result;

if (Attendance < 0.0 || Attendance > 100.0 ||

score < 0 || score > 100)

result = "エラー";
else if (Attendance >= 20)
{
if (score >= 80)
result = "アスペ";
else if (score >= 70)
result = "基地外";
else if (score >= 60)
result = "4級";
else
result = "退席";
}

else

result = "退席";

return result;
}
//平均点判定

//(仮引数) score : 得点 subject : 科目 (1=数学 2=物理 3=英語)

//(返却値) 判定結果

private string averageJudge(int score, int subject)
{
string result;

int average;

if (score < 0 || score > 100)
return "エラー";

switch (subject)
{
case 1:

average = 30;

break;

case 2:

average = 60;

break;

case 3:

average = 75;

break;

default:

return "エラー";

}

if (score >= average)
result = "万歳";

else

result = "天皇万歳";

return result;
}

private void buttonReset_Click(object sender, EventArgs e)
{

textBoxAttendanceM.Text = "0.0";

textBoxAttendanceP.Text = "0.0";

textBoxAttendanceE.Text = "0.0";

textBoxScoreM.Text = "0";

textBoxScoreP.Text = "0";

textBoxScoreE.Text = "0";

labelResultM.Text = "";

labelResultP.Text = "";

labelResultE.Text = "";

labelCompAvgM.Text = "";

labelCompAvgP.Text = "";

labelCompAvgE.Text = "";
}

private void labelResultE_Click(object sender, EventArgs e)
{

}

private void label7_Click(object sender, EventArgs e)
{

}

private void label8_Click(object sender, EventArgs e)
{

}

private void label6_Click(object sender, EventArgs e)
{

}

private void textBoxAttendanceE_TextChanged(object sender, EventArgs e)
{

}

private void textBoxScoreE_TextChanged(object sender, EventArgs e)
{

}

private void textBoxScoreP_TextChanged(object sender, EventArgs e)
{
}

private void button1_Click(object sender, EventArgs e) //②
{

}
}
}

なぜ val = -1.0;やval = -1;を書くのかわからないのですが・・・・

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • SurferOnWww

    2017/05/25 19:19

    コードは ``` と ``` で囲ってください。インデントされてないコードは読んでくれる人が少ないと思いますよ。

    キャンセル

  • len_souko

    2017/05/25 23:09

    関係ない部分もすべてコピペだし上記の指摘もあるし、中を流し見したけどアスペとか基地外とか悪意に満ちた言葉と一緒に万歳や天皇万歳を使うとか、何か悪意があって書いてるんでしょうか?

    キャンセル

回答 2

+2

入力値が数値(intやdouble)に変換できなければ -1 と見なしたいから。
そうすることで scoreJudge メソッドでエラーと判定されるようです。
なぜエラーと判定するかはこれを作った人にしかわかりません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

完全な素人の考えですが

if (Attendance < 0.0 || Attendance > 100.0 ||

score < 0 || score > 100)

result = "エラー";


ここの判定のためではないでしょうか。
出席率か得点のどちらかがおかしかった場合に
"エラー"と返せるようにするのが目的だったのではと
私個人は推測します。

このプログラムが動くかどうかは調べていないので
実際にどういった動きになるかは分かりません。

補足

作ってみました。

using System;
using System.Windows.Forms;

namespace testcheck1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public static string result(string Attendance, string Score, string Average)
        {
            int attendance;
            if(!int.TryParse(Attendance, out attendance))
            {
                return "ERROR";
            }

            int score;
            if(!int.TryParse(Score, out score))
            {
                return "ERROR";
            }

            int average;
            if (!int.TryParse(Average, out average))
            {
                return "ERROR";
            }

            if (attendance < 0 || attendance > 100 || score < 0 || score > 100
                || average < 0 || average > 100)
            {
                return "ERROR";
            }

            if (attendance < 20) return "退席";

            string tmp = string.Empty;

            if (score >= average) tmp += "万歳/";

            if (score >= 80) return tmp += "アスペ";
            if (score >= 70) return tmp += "基地外";
            if (score >= 60) return tmp += "4級";
            else return tmp += "退席";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ちゃんだい評価.Text = result(ちゃんだい出席率.Text, ちゃんだい点数.Text, ちゃんだい平均点.Text);
            たくちゃん評価.Text = result(たくちゃん出席率.Text, たくちゃん点数.Text, たくちゃん平均点.Text);
            しんちゃん評価.Text = result(しんちゃん出席率.Text, しんちゃん点数.Text, しんちゃん平均点.Text);
            和樹評価.Text = result(和樹出席率.Text, 和樹点数.Text, 和樹平均点.Text);
            さっきーなぁ評価.Text = result(さっきーなぁ出席率.Text, さっきーなぁ点数.Text, さっきーなぁ平均点.Text);
            組長評価.Text = result(組長出席率.Text, 組長点数.Text, 組長平均点.Text);
        }
    }
}


コード無しの完成品
私は私のプログラムが正常に動くかどうかを一切保証しません。
利用については自己責任でお願いします。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る