Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列出前三大销售数量_C# - Fatal编程技术网

C# 列出前三大销售数量

C# 列出前三大销售数量,c#,C#,问题-我需要列出前三名鱼销售数量,但我不能找出代码 这就是我到目前为止所做的。。。。。我可以知道我的条件是错误的还是我的循环是错误的吗 private void btnMax_Click(object sender, EventArgs e) //Allan { //Local Variable float max_value1 = sales_qty[0]; float max_value2 = s

问题-我需要列出前三名鱼销售数量,但我不能找出代码

这就是我到目前为止所做的。。。。。我可以知道我的条件是错误的还是我的循环是错误的吗

private void btnMax_Click(object sender, EventArgs e) //Allan
            {
            //Local Variable
            float max_value1 = sales_qty[0];
            float max_value2 = sales_qty[0];
            float max_value3 = sales_qty[0];
            int max_index1 = 0;
            int max_index2 = 0; 
            int max_index3 = 0;

            //Loop to find Highest Qty of Fish Sold
            for (int i = 1; i < fish_name.Length; i++)
            {
                if (sales_qty[i] > max_value1)
                {
                    max_value1 = sales_qty[i];
                    max_index1 = i;
                }
            }

            for (int i = 1; i < fish_name.Length; i++)
            {
                if (sales_qty[i] > max_value2 && sales_qty[i] != max_value1)
                {
                    max_value2 = sales_qty[i];
                    max_index2 = i;
                }
            }

            for (int i = 1; i < fish_name.Length; i++)
            {
                if (sales_qty[i] > max_value3 && sales_qty[i] != max_value2)
                {
                    max_value3 = sales_qty[i];
                    max_index3 = i;
                }
            }

            //Display
            MessageBox.Show("Top 3 Selling Fish is: "
                + "\n"
                + fish_name[max_index1]
                + "Quantity Sold:"
                + sales_qty[max_index1]
                + "\n"
                + fish_name[max_index2]
                + "Quantity Sold:"
                + sales_qty[max_index2]
                + "\n"
                + fish_name[max_index3]
                + "Quantity Sold:"
                + sales_qty[max_index3]);

        }
private void btnMax\u单击(对象发送者,事件参数)//Allan
{
//局部变量
浮动最大值1=销售数量[0];
浮动最大值2=销售数量[0];
浮动最大值3=销售数量[0];
int max_index1=0;
int max_index2=0;
int max_index3=0;
//循环查找售出的鱼的最高数量
对于(int i=1;i最大值1)
{
最大值1=销售数量[i];
max_index1=i;
}
}
对于(int i=1;i最大值2和销售数量[i]!=最大值1)
{
最大值2=销售数量[i];
max_index2=i;
}
}
对于(int i=1;i最大值3和销售数量[i]!=最大值2)
{
最大值3=销售数量[i];
max_index3=i;
}
}
//展示
MessageBox.Show(“最畅销的三种鱼是:”
+“\n”
+鱼名[max_index1]
+“售出数量:”
+销售数量[最大指数1]
+“\n”
+鱼名[max\u index2]
+“售出数量:”
+销售数量[最大指数2]
+“\n”
+鱼名[max\u index3]
+“售出数量:”
+销售数量[最大指数3];
}

首先,你的启蒙是错误的:

float max_value1 = sales_qty[0];
float max_value2 = sales_qty[0];
float max_value3 = sales_qty[0];
如果销售数量[0]是最大元素怎么办?然后,以下所有条件都将返回错误。然后,找不到第二高和第三高的元素:

if (sales_qty[i] > max_value2 && sales_qty[i] != max_value1)
if (sales_qty[i] > max_value3 && sales_qty[i] != max_value2) 
接下来,您的条件意味着您假设这些值不同,对吗? 然而,实际上,前三个数量可以相等:D

为了确保这些数量属于不同类型的鱼类,您应该检查索引,而不是值

下面是我建议的检查条件的代码。您可以将支票替换为:)

int[]销售数量={10,1,3,0,2,10,9}//只是为了测试。你可以禁用它
浮动最大值1=-1;
浮动最大值2=-1;
浮动最大值3=-1;
int max_index1=-1;
int max_index2=-1;
int max_index3=-1;
//循环查找售出的鱼的最高数量
//始终确保最大值1>=最大值2>=最大值3;
对于(int i=0;i<销售数量长度;i++)
{
如果(销售数量[i]>最大值1){//需要重新分配
最大值3=最大值2;最大索引3=最大索引2;
max_value2=max_value1;max_index2=max_index1;
最大值1=销售数量[i];最大索引1=i;继续;}
//平均销售数量[i]最大值2){//需要重新分配
最大值3=最大值2;最大索引3=最大索引2;
max_value2=销售数量[i];max_index2=i;继续;}
//平均销售数量[i]max\u值3{max\u值3=销售数量[i];max\u index3=i;继续;}
}

当我有一个5百万以上的条目数组,想要找到一个可变数量(1到25)的最大值时,我使用了如下类似的东西:

int[] sales = {10,1,3,0,2,10,9};
int x=3; // Amount of top values.

int[] max=int[x]; // Contains the x max values (not indices)
for(int i=0;i<x;i++) max[i]=0;

int mini = 0; // Index of smallest value in max array (first to discard)

for(int i=0;i<sales.length;i++) {
 if(sales[i]>max[mini]) {
  max[mini]=sales[i]; // add new value, overwrite smallest max array entry
  for(int j=0;j<x;j++) if(max[j]<max[mini]) mini=j; // Find new minimum
 }
}
int[]sales={10,1,3,0,2,10,9};
int x=3;//最高值的数量。
int[]max=int[x];//包含x最大值(非索引)

对于(int i=0;i调试器有什么问题?销售数量、鱼名等的类型是什么//数组字符串[]鱼名=新字符串[1];字符串[]鱼码=新字符串[1];浮动[]鱼成本=新浮动[1];浮动[]鱼零售=新浮动[1];int[]鱼数量=新整数[1];int[]销售数量=新整数[1];销售类型、数量、鱼名等都是数组。非常感谢,我现在就试试。嘿,代码很好!但是我可以知道关键字continue是什么意思吗?谢谢,我理解它=)@aresglory:如msdn中所述:continue语句将控制权传递到封闭的下一个迭代,而do,for,或它出现的每个语句。另外,如果代码有效,你能把它标记为答案吗?
int[] sales = {10,1,3,0,2,10,9};
int x=3; // Amount of top values.

int[] max=int[x]; // Contains the x max values (not indices)
for(int i=0;i<x;i++) max[i]=0;

int mini = 0; // Index of smallest value in max array (first to discard)

for(int i=0;i<sales.length;i++) {
 if(sales[i]>max[mini]) {
  max[mini]=sales[i]; // add new value, overwrite smallest max array entry
  for(int j=0;j<x;j++) if(max[j]<max[mini]) mini=j; // Find new minimum
 }
}