繁体   English   中英

C# 程序中的 output 值错误

[英]Wrong output value in C# programm

各位晚上好

我最近开始学习 C#。 由于我已经学过C / C++很多次了,而这学期我在学Java,我想应该不会很难。 但是我遇到了一个意想不到的问题。

任务是这样的:“有四个人。人员数据以这样的格式给出:姓名(字符串),身高米(双)和体重公斤(双)。创建一个 class 人来存储有关单人的数据。初始数据从键盘输入(用户输入)。编写一个程序,求人的平均体重,并计算哪个人最低。如果发现多人最低,则全部打印。至少必须实现 3 个自定义方法: 用于数据输入、计算 (-s) 和在屏幕上显示结果。以表格形式将初始数据、平均体重和所有关于最低人的数据 (-s) 打印到控制台。不允许使用对象数组。”

问题是在结果表中,我有字段名称、高度和宽度。 并且由于某种原因,高度数据也被写入宽度字段:

Write a person`s name-: Artem
Write a person`s height-: 1,81
Write a person`s weight-: 67

Write a person`s name-: Yaroslav
Write a person`s height-: 1,80
Write a person`s weight-: 65,5

Write a person`s name-: Ivan
Write a person`s height-: 1,78
Write a person`s weight-: 70

Write a person`s name-: Ann
Write a person`s height-: 1,78
Write a person`s weight-: 64

Write a person`s name-: x
-----------------------------------------------------------------
|       Name     |      Height (m.)     |       Weight (kg.)    |
-----------------------------------------------------------------
|   Artem        |          1,81        |    1,81(must be 67)   |
-----------------------------------------------------------------
|   Yaroslav     |          1,80        |    1,80(must be 65,5) |
-----------------------------------------------------------------
|   Ivan         |          1,78        |    1,78(must be 70)   |
-----------------------------------------------------------------
|   Ann          |          1,78        |    1,78(must be 64)   |
-----------------------------------------------------------------

我什至不知道为什么会这样。

代码:

using System;
using System.Collections.Generic;

namespace Person
{
    internal class Program
    {
        class Person{
            private string name;
            private double width, height;

            public Person(string name, double width, double height) {
                this.name = name;
                this.width = width;
                this.height = height;
            }

            public string GetName() { return name; }
            public double GetHeight() { return height; }
            public double GetWidth() { return width; }
        }

        static void Main(string[] args)
        {
            string name;
            double height, width;
            int count = 0;
            List<Person> person = new List<Person>();

            for (int i = 0; ;i++) {
                name = getName();
                if (name == "X" || name == "x") {
                    break;
                }
                height = getHeight();
                width = getWidth();
                person.Add(new Person(name, height, width));
                count++;
            }

            Console.WriteLine("-----------------------------------------------------------------");
            Console.WriteLine("|\tName\t |\tHeight (m.)\t|\tWeight (kg.)\t|");
            Console.WriteLine("-----------------------------------------------------------------");
            for (int i = 0; i < count; i++) {
                Console.WriteLine("|   {0}\t |\t{2,8:f2}\t|\t{2,8:f2}\t|", person[i].GetName(), person[i].GetHeight(), person[i].GetWidth());
                Console.WriteLine("-----------------------------------------------------------------");
            }

            double avg = SetAverageWidth(person, count);
            Console.WriteLine("\nAvergae width-: {0:f2}", avg);
            Lowest(person, count);
        }

        static string getName() {
            Console.Write("\nWrite a person`s name-: ");
            string name = Console.ReadLine();
            return name;
        }
        static double getWidth(){
            Console.Write("Write a person`s width-: ");
            double width = double.Parse(Console.ReadLine());
            return width;
        }
        static double getHeight(){
            Console.Write("Write a person`s height-: ");
            double height = double.Parse(Console.ReadLine());
            return height;
        }
        static double SetAverageWidth(List<Person> person, int count)
        {
            double res = 0;
            for (int i = 0; i < count; i++)
            {
                //if (person[i] == null) { break; }
                res += person[i].GetWidth();
            }
            return res / count;
        }
        static void Lowest(List<Person> person, int count) {
            double max, min;
            int i = 0;
        
            max = min = count;
            for (int j = 0; j < count; j++) {
                if (person[i].GetHeight() > max)
                    max = person[i].GetHeight();
            }

            Console.WriteLine("\n-*-*-*-*-*-*-*-*-*-*-*-*- The Lowest -*-*-*-*-*-*-*-*-*-*-*-*-*- ");
            Console.WriteLine("-----------------------------------------------------------------");
            for (int j = 0; j < count; j++) {
                if (person[j].GetHeight() == max)
                {
                    Console.WriteLine("|   {0}\t |\t{2,8:f2}\t|\t{2,8:f2}\t|", person[j].GetName(), person[j].GetHeight(), person[j].GetWidth());
                    Console.WriteLine("-----------------------------------------------------------------");
                }
            }
        }
    }
}

您的格式字符串仅使用{0}{2} 您在第 50 行缺少{1}

Console.WriteLine("|   {0}\t |\t{2,8:f2}\t|\t{2,8:f2}\t|", person[i].GetName(), person[i].GetHeight(), person[i].GetWidth());

和第 106 行:

Console.WriteLine("|   {0}\t |\t{2,8:f2}\t|\t{2,8:f2}\t|", person[j].GetName(), person[j].GetHeight(), person[j].GetWidth());

将第二个格式字符串更改为{1,8:f2}

除此之外:

  • 检查Person的构造函数中 arguments 的顺序,创建新人时不小心翻转了宽度和高度
  • 阅读有关属性。 C# 不使用Get...()Set...()方法,例如 Java
  • 检查您是否想要人的宽度重量
        public Person(string name, double width, double height) {

   person.Add(new Person(name, height, width));

您的 arguments 顺序错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM