2

私はC#が初めてで、別のメソッドを使用して変数を変更する方法を理解しようとしています。私が投稿しているコードは私が取り組んでいるものであり、それを行うためのはるかに優れた簡単な方法があることは知っていますが、与えられたパラメーターを使用することを余儀なくされています.

したがって、コードについては、複数のメソッドが必要であり、最初のメソッドから変数を作成/取得し、2 番目のメソッドで変更してから、その変更された変数を 3 番目の別のメソッドで使用しようとしています。しかし、必要なメソッドの種類や、ref、out などを使用する必要があるかどうかを理解しているかどうかはわかりません。

私がここに投稿しているコード (最終的に変数を 3 番目のメソッドにプルする 2 つのメソッド) は、現時点ではまだエラーをスローしていませんが、必要なものに対しては機能しないと思います。

ascore最初のメソッドで、midScore、およびfinalscoreを取得し、最初のメソッドでtryparsetryparseされた後に変更し、3 番目のメソッドの計算にその最後の tryparsed /modified 変数を使用しようとしています。最初のメソッドには bool を使用し、2 番目のメソッドにも void を使用する必要があると言われました。したがって、最後の ascore、midScore、および finalscore 変数を、3 番目のメソッドの最初の 2 つのメソッドから tryparse および変更する方法がわかりません。

    private bool DoGrades(out decimal ascore, out decimal midScore, out decimal finalscore)
    {

        if (decimal.TryParse(assignmentBox.Text, out ascore) && (ascore <= 100) && (ascore >= 0))
        {
            if (decimal.TryParse(midtermBox.Text, out midScore) && (midScore <= 100) && (midScore >= 0))
            {
                if (decimal.TryParse(finalBox.Text, out finalscore) && (finalscore < 100) && (finalscore >= 0))
                {
                    IsTrue = true;
                    return IsTrue;
                }

                else
                {
                    MessageBox.Show("Input must be between 0 and 100");
                    assignmentBox.Text = "";
                    midtermBox.Text = "";
                    finalBox.Text = "";
                    finalBox.Focus();
                    IsTrue = false;
                }
            }

            else
            {
                MessageBox.Show("Input must be between 0 and 100");
                assignmentBox.Text = "";
                midtermBox.Text = "";
                finalBox.Text = "";
                midtermBox.Focus();
                IsTrue = false; 
            }
        }
        else
        {
            MessageBox.Show("Input must be between 0 and 100");
            assignmentBox.Text = "";
            midtermBox.Text = "";
            finalBox.Text = "";
            assignmentBox.Focus();
            IsTrue = false; 
        }
        DoGrades(out ascore, out midScore, out finalscore);

        return true;
    }

    private void BonusPoints (ref decimal itMajor, ref decimal lovingIt)
    {

        if (itMajorCheck.Checked)
        {
            itMajor = 10;
        }
        else
        {
            itMajor = 0;
        }

        if (lovingCheck.Checked)
        {
            lovingIt = 10;
        }
        else
        {
            lovingIt = 0;
        }

        ascore = ascore + itMajor + lovingIt;
        midScore = midScore + itMajor + lovingIt;
        finalscore = finalscore + itMajor + lovingIt;

    }
4

1 に答える 1

1
  1. 私の推測では、あなたは質問を誤解しています。
  2. DoGrades内で呼び出している理由がわかりません。それはDoGrades、無限再帰ループを作成するだけです。DoGradesそれ以外は問題ないようです。
  3. BonusPointsあなたの大きな誤解のようです。入ってくる値は使用されず、常に上書きされるためitMajor、 andlovingItを変数にする意味はありません。ref(また、ボーナスが 2 つの変数に分割される理由もわかりませんが、何でも構いません。)
  4. あなたの先生は、参照によってすべての値を受け入れるように計算を行う 3 番目の方法を望んでいると思います。それが実際に目的を果たす唯一のポイントですが、ボーナスを渡すref必要はありません.

コード

void CaclulateScores() 
{
  decimal aScore;
  decimal midScore;
  decimal finalScore;
  decimal itBonus;
  decimal lovingBonus;

  if (DoGrades(out aScore, out midScore, out finaleScore)) 
  {
     BonusPoints(out itBonus, out lovingBonus);
     // I assume you this is what your last method signature is.
     ApplyBonus(ref aScore, ref midScore, ref finaleScore, itBonus, lovingBonus);
  }
}

void BonusPoints (out decimal itBonus, out decimal lovingBonus) 
{
  itBonus = (itMajorCheck.Checked) ? 10 : 0;
  lovingBonus = ((lovingCheck.Checked) ? 10 : 0;
}

void ApplyBonus(ref aScore, ref midScore, ref finaleScore, ref bonus, itBonus, lovingBonus)
{
  aScore += itBonus + lovingBonus;
  midScore += itBonus + lovingBonus;
  finaleScore += itBonus + lovingBonus;
}
于 2013-11-09T22:16:12.347 に答える