[英]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 的顺序,创建新人时不小心翻转了宽度和高度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.