我是C#的新手。我写了一个程序,它编译但没有给出所需的输出 [英] I am a newbie to C#. I wrote a program which compiles but doesnt give out the required output

查看:65
本文介绍了我是C#的新手。我写了一个程序,它编译但没有给出所需的输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

创建一个名为average的类,其中包含三条信息作为自动属性 ​​- score1(类型int),score2(类型int)和score3(类型int)。您的类应该有一个构造函数,初始化三个自动属性并假定提供的值是正确的。在构造函数中,您应该将传递给构造函数的三个值分配给Score1,Score2和Score3。提供方法calculateAverage,将所有三个一起添加并计算三个条目的平均值,并计算整数除法的任何余数。提供DisplayAverage方法,显示输出,如下例所示。请注意,控制台没有输入值,三个得分值从Main传递给构造函数。



在名为averageTest的默认包装类中包含Main写入Main中的代码演示了class average的功能



这里是我的代码



Create a class called average that includes three pieces of information as automatic properties—a score1 (type int), a score2 (type int), and a score3 (type int). Your class should have a constructor that initializes the three automatic properties and assumes that the values provided are correct. In the constructor you should assign the three values passed into the constructor to Score1, Score2 and Score3. Provide a method calculateAverage that adds all three together and computes an average of the three entries and computes any remainder of the integer division. Provide a method DisplayAverage that displays the output as shown in the example below. Note that there are no values input to the console, the three score values are passed into the constructor from Main.

In the default wrapper class named averageTest and containing Main write the code in Main that demonstrates class average’s capabilities

here is my code

// Assignment 2a
// average class with automatic properties for the score1, score2 and score3.
using System;

public class average
{
   
    public int Score1 { get; set; }
    public int Score2 { get; set; }
    public int Score3 { get; set; }

    int remainder;
    int avg;
    int result;
   // constructor shell accepting three values
   public average(int score1Value, int score2Value, int score3Value)
   {
 Score1 = score1Value;
Score2 = score2Value;
Score3 = score3Value;
   } // end three-parameter constructor

   // calculate the average of the three scores
public void calculateAverage()
   {

      //Write the code to compute avg
      //write the code to compute the remainder
     // int avg = 0;
      //int size = 3;

      result = Score1 + Score2 + Score3;
      avg = result / 3;
       remainder = result % 3;
   } // end method calculateAverage


// display the average
public void DisplayAverage()
   {
Console.Write( "{0} , {1}, {2} is", Score1, Score2, Score3 );
      //Write the console writeline to output the three variables,
      //the average and the remainder to the console
   } // end method DisplayAverage 
} // end class average

public class AverageTest
{
   public static void Main(string[] args)
	{
     
	  //instantiate a new average passing the
                //the score1, score2 and score3 values respectively 
      average myaverage = new average (3, 6, 4);

      

      myaverage.Score1 = 3;
      myaverage.Score2 = 6;
      myaverage.Score3 = 4;
               //call myaverage.calculateAverage
               //call myaverage.DisplayAverage()
      Console.Write("The average of 3, 6,  4 is " );
      myaverage.DisplayAverage();

      Console.Write("\n with a remainder of ");
      myaverage.calculateAverage();
	  
              Console.WriteLine(); // output a new line
	} // end Main
} // end class averageTest

推荐答案

遇到的一些问题:

- 你将值正确传递给构造函数,但然后再次将值分配给属性。据我所知,这不是要求

- 之后显示平均值,但是你没有计算它,你只是不喜欢这些值。一种选择是在显示平均值之前首先计算平均值并将其存储在变量中或创建一个返回平均值的方法。

- 余数计算结果如何,我预计用户会提供将用于计算的数字...



无论如何,我会首先关注平均计算。请记住广泛使用调试器。使用调试器逐行查看代码,看看会发生什么并理解代码执行。
Some problems you've encountered:
- you pass the values correctly to the constructor but then you assign the values to the properties again. As far as I can see this was not the requirement
- after that you display the average, however you haven't calculated it, you just displeay the values. One option is to calculate the average first before displaying it and store it in a variable or create a method which would return the average.
- what comes to the remainder calculation, I expected that the user provides the numbers which would be used for the calculation...

In any case I would first concentrate on the average calculation. Remember to use debugger extensively. Using debugger go through the code, line-by-line to see what happens and to understand the code execution.


编译并不意味着你的代码是正确的! :笑:

将开发过程视为编写电子邮件:成功编译意味着您使用正确的语言编写电子邮件 - 例如英语,而不是德语 - 但电子邮件包含您想要的邮件发送。



所以现在你进入第二阶段的发展(实际上它是第四或第五阶段,但你会在之后的阶段进入):测试和调试。



首先看看它做了什么,以及它与你想要的有何不同。这很重要,因为它可以为您提供有关其原因的信息。例如,如果程序旨在让用户输入一个数字并将其翻倍并打印答案,那么如果输入/输出是这样的:

Compiling does not mean your code it right! :laugh:
Think the development process as writing an email: compiling successfully means that you wrote the email in the right language - English, rather than German for example - nnot that the email contained the message you wanted to send.

So now you enter the second stage of development (in reality it's the fourth or fifth, but you'll come to the earlier stages later): Testing and Debugging.

Start by looking at what it does do, and how that differs from what you wanted. This is important, because it give you information as to why it's doing it. For example, if a program is intended to let the user enter a number and it doubles it and prints the answer, then if the input / output was like this:
Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16

然后很明显问题出在将它加倍的位 - 它不会将自身加到自身上,或者将它乘以2,它会将它自身相乘并返回输入的平方。

所以,你可以查看代码和很明显,它在某处:

Then it's fairly obvious that the problem is with the bit which doubles it - it's not adding itself to itself, or multiplying it by 2, it's multiplying it by itself and returning the square of the input.
So with that, you can look at the code and it's obvious that it's somewhere here:

private int Double(int value)
   {
   return value * value;
   }



一旦你知道可能出现的问题,就开始使用teh调试器找出原因。在你的行上设一个断点:


Once you have an idea what might be going wrong, start using teh debugger to find out why. Put a breakpoint on your line:

myaverage.DisplayAverage();



并运行你的应用程序。在执行代码之前,请考虑代码中的每一行应该做什么,并将其与使用Step over按钮依次执行每一行时实际执行的操作进行比较。它符合您的期望吗?如果是这样,请转到下一行。

如果没有,为什么不呢?它有何不同?



这是一项非常值得开发的技能,因为它可以帮助你在现实世界和发展中。和所有技能一样,它只能通过使用来改善!



是的,我可能会告诉你问题是什么 - 但这并不难做到,并且你将同时学到一些非常值得的东西!


and run your app. Think about what each line in the code should do before you execute it, and compare that to what it actually did when you use the "Step over" button to execute each line in turn. Did it do what you expect? If so, move on to the next line.
If not, why not? How does it differ?

This is a skill, and it's one which is well worth developing as it helps you in the real world as well as in development. And like all skills, it only improves by use!

Yes, I could probably tell you what "the problem" is - but it's not difficult to do this yourself, and you will learn something really worthwhile at the same time!


使用此代码

Use this code
public class average
   {

       public int Score1 { get; set; }
       public int Score2 { get; set; }
       public int Score3 { get; set; }

       public int remainder;
       int avg;
       int result;
       public average()
       {
       }

       // calculate the average of the three scores
       public void calculateAverage()
       {
           //Write the code to compute avg
           //write the code to compute the remainder
           result = Score1 + Score2 + Score3;
           avg = result / 3;
           remainder = result % 3;
       } // end method calculateAverage


       // display the average
       public void DisplayAverage()
       {

           Console.Write(string.Format("The average of {0}, {1},  {2} is {3}", this.Score1, this.Score2, this.Score3,this.avg));
           //Write the console writeline to output the three variables,
           //the average and the remainder to the console
       } // end method DisplayAverage
   } // end class average

   public class AverageTest
   {
       public static void Main(string[] args)
       {

           //instantiate a new average passing the
           //the score1, score2 and score3 values respectively
           average myaverage = new average();

           myaverage.Score1 = 3;
           myaverage.Score2 = 6;
           myaverage.Score3 = 4;
           myaverage.calculateAverage();
           myaverage.DisplayAverage();

           Console.Write("\n with a remainder of " + myaverage.remainder);


           Console.WriteLine(); // output a new line
           Console.Read();
       } // end Main
   }

< br $>


指向要记住

1.如果您使用的是getter和setter,请不要使用构造函数来指定变量值。

2.代码将按顺序执行。



希望这会对你有所帮助



points to remember
1. Don't use constructor to assigning variable values if you are using getters and setters.
2. The code will execute in sequential order.

Hope this will help you


这篇关于我是C#的新手。我写了一个程序,它编译但没有给出所需的输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆