重载运算符时如何放置 6 个值?但是之后还可以加值吗?
How you can put 6 values when overloading an operator? But values also can be added after?
好的,我知道这看起来很复杂。
首先,代码必须采用 2 个字符串和 2 个整数,并根据输入将它们拼在一起,然后输出结果,就像:
输入:
戴夫
8个
杰西卡
7
输出:
戴夫和杰西卡
15
我尝试了很多次不同的方法,但 none 似乎有效:(
我尝试将 name1 或 name2 之类的字符串放入 DancerPoints Class 但我找不到连接输入的方法我的意思是它在那里但无法获得输入。
我也试过直接将值放入参数,但它说运算符只能取 2 个值,但我需要 6 个! 4 个舞者值 2 个管理值。
此时它只获取 firstdancer 的字符串和 int 并使用它,但我不知道如何添加 seconddancer 的值。
我为此工作了 3 个晚上,我不知道还能做什么? :(
using System;
using System.Collections.Generic;
namespace Code_Coach_Challenge
{
class Program
{
// I tried putting values here with public but why that not workked I dont know :(
static void Main(string[] args)
{
string name1 = Console.ReadLine();
int points1 = Convert.ToInt32(Console.ReadLine());
string name2 = Console.ReadLine();
int points2 = Convert.ToInt32(Console.ReadLine());
DancerPoints dancer1 = new DancerPoints(name1, points1);
DancerPoints dancer2 = new DancerPoints(name2, points2);
DancerPoints total = dancer1 + dancer2;
Console.WriteLine(total.name);
Console.WriteLine(total.points);
}
}
class DancerPoints
{
public string name;
public int points;
// I tried putting values here no luck.error CS7036
public DancerPoints(string name, int points)
{
this.name = name;
this.points = points;
// I tried putting values here no luck.error CS7036
}
//overload the + operator
public static DancerPoints operator+ (DancerPoints n, DancerPoints p)
{
// I tried putting values here no luck.error CS7036
string name = n.name + " & " + n.name;
int points = p.points + p.points;
DancerPoints res = new DancerPoints(name, points);
return res;
}
}
}
您的运算符重载应该是:
public static DancerPoints operator+ (DancerPoints n, DancerPoints p)
{
string name = n.name + " & " + p.name;
int points = n.points + p.points;
DancerPoints res = new DancerPoints(name, points);
return res;
}
请注意我是如何将 n 变成 p 并将 p 变成 n 的。
这样 n 和 p 的名称和点值都被使用了。
如果你想让程序做的只是
,你可以简化很多代码
- 询问 Name1
- 求积分1
- 询问 Name2
- 求积分2
- 打印
{Name1} & {Name2} {Points1 + Points2}
string name1 = Console.ReadLine();
int points1 = Convert.ToInt32(Console.ReadLine());
string name2 = Console.ReadLine();
int points2 = Convert.ToInt32(Console.ReadLine());
string output = $"{name1} & {name2} {points1 + points2}"
Console.WriteLine(output);
只是简单的字符串连接。不需要任何花哨的 类 或运算符重载。
现在,如果您想将代码扩展为同时处理两个以上的人,那么
class Dancer
{
public string Name {get;set;}
public int Score {get;set;}
}
var dancers = new List<Dancer>
{
new Dancer { Name = "David", Score = 8 },
new Dancer { Name = "Jessica", Score = 7 },
new Dancer { Name = "Sally", Score = 6 },
}
var allNames = string.Join(" & ", dancers.Select(x => x.Name));
var totalScore = dancers.Sum(x => x.Score);
var output = $"{allNames} {totalScore}"
通过这个例子你会得到
David & Jessica & Sally 21
同样,不需要运算符重载。将舞者一起“添加”到一个新的“舞者”对象中并没有什么意义。
好的,我知道这看起来很复杂。 首先,代码必须采用 2 个字符串和 2 个整数,并根据输入将它们拼在一起,然后输出结果,就像:
输入: 戴夫 8个 杰西卡 7
输出: 戴夫和杰西卡 15
我尝试了很多次不同的方法,但 none 似乎有效:(
我尝试将 name1 或 name2 之类的字符串放入 DancerPoints Class 但我找不到连接输入的方法我的意思是它在那里但无法获得输入。
我也试过直接将值放入参数,但它说运算符只能取 2 个值,但我需要 6 个! 4 个舞者值 2 个管理值。
此时它只获取 firstdancer 的字符串和 int 并使用它,但我不知道如何添加 seconddancer 的值。
我为此工作了 3 个晚上,我不知道还能做什么? :(
using System;
using System.Collections.Generic;
namespace Code_Coach_Challenge
{
class Program
{
// I tried putting values here with public but why that not workked I dont know :(
static void Main(string[] args)
{
string name1 = Console.ReadLine();
int points1 = Convert.ToInt32(Console.ReadLine());
string name2 = Console.ReadLine();
int points2 = Convert.ToInt32(Console.ReadLine());
DancerPoints dancer1 = new DancerPoints(name1, points1);
DancerPoints dancer2 = new DancerPoints(name2, points2);
DancerPoints total = dancer1 + dancer2;
Console.WriteLine(total.name);
Console.WriteLine(total.points);
}
}
class DancerPoints
{
public string name;
public int points;
// I tried putting values here no luck.error CS7036
public DancerPoints(string name, int points)
{
this.name = name;
this.points = points;
// I tried putting values here no luck.error CS7036
}
//overload the + operator
public static DancerPoints operator+ (DancerPoints n, DancerPoints p)
{
// I tried putting values here no luck.error CS7036
string name = n.name + " & " + n.name;
int points = p.points + p.points;
DancerPoints res = new DancerPoints(name, points);
return res;
}
}
}
您的运算符重载应该是:
public static DancerPoints operator+ (DancerPoints n, DancerPoints p)
{
string name = n.name + " & " + p.name;
int points = n.points + p.points;
DancerPoints res = new DancerPoints(name, points);
return res;
}
请注意我是如何将 n 变成 p 并将 p 变成 n 的。 这样 n 和 p 的名称和点值都被使用了。
如果你想让程序做的只是
,你可以简化很多代码- 询问 Name1
- 求积分1
- 询问 Name2
- 求积分2
- 打印
{Name1} & {Name2} {Points1 + Points2}
string name1 = Console.ReadLine();
int points1 = Convert.ToInt32(Console.ReadLine());
string name2 = Console.ReadLine();
int points2 = Convert.ToInt32(Console.ReadLine());
string output = $"{name1} & {name2} {points1 + points2}"
Console.WriteLine(output);
只是简单的字符串连接。不需要任何花哨的 类 或运算符重载。
现在,如果您想将代码扩展为同时处理两个以上的人,那么
class Dancer
{
public string Name {get;set;}
public int Score {get;set;}
}
var dancers = new List<Dancer>
{
new Dancer { Name = "David", Score = 8 },
new Dancer { Name = "Jessica", Score = 7 },
new Dancer { Name = "Sally", Score = 6 },
}
var allNames = string.Join(" & ", dancers.Select(x => x.Name));
var totalScore = dancers.Sum(x => x.Score);
var output = $"{allNames} {totalScore}"
通过这个例子你会得到
David & Jessica & Sally 21
同样,不需要运算符重载。将舞者一起“添加”到一个新的“舞者”对象中并没有什么意义。