C# 输入超出数组设置范围的数字,索引超出范围错误
我想制作一个程序,其中一个用户输入一个数字,在这个例子中是一个项目的数量。 然后将项目数与数组中的值进行比较,并显示相应的折扣C# 输入超出数组设置范围的数字,索引超出范围错误,c#,arrays,runtime-error,C#,Arrays,Runtime Error,我想制作一个程序,其中一个用户输入一个数字,在这个例子中是一个项目的数量。 然后将项目数与数组中的值进行比较,并显示相应的折扣 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication11 { class Program { const int SIZE = 4; static
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication11
{
class Program
{
const int SIZE = 4;
static void Main(string[] args)
{
int itemsbought = 0;
int discountItem = 0;
int[] items = new int[SIZE] { 0, 10, 26, 61 };
int[] discount = new int[SIZE] { 0, 5, 10,15 };
InputItems(ref itemsbought);
getDiscount(items, discount, ref itemsbought, ref discountItem);
Console.WriteLine("Your discount is {0}", discountItem);
}
private static void getDiscount(int[] items, int[] discount, ref int itemsbought, ref int discountItem)
{
int idx = 0;
for (idx = 0; itemsbought > items[idx] || idx > items.Length; idx++)
{
discountItem = discount[idx];
}
}
private static void InputItems(ref int itemsbought)
{
Console.WriteLine("Enter the amount of items you bought");
while (!int.TryParse(Console.ReadLine(), out itemsbought))
if (itemsbought < 0)
{
Console.WriteLine("Error, whole numbers over 0 only");
}
Console.WriteLine("Error, whole numbers over 0 only");
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序11
{
班级计划
{
常数int SIZE=4;
静态void Main(字符串[]参数)
{
int itemsbunk=0;
int折扣项目=0;
int[]items=新的int[SIZE]{0,10,26,61};
int[]折扣=新的int[SIZE]{0,5,10,15};
输入项目(参考项目采购);
获取折扣(项目、折扣、参考项目采购、参考折扣项目);
WriteLine(“您的折扣为{0}”,折扣项);
}
私有静态void get折扣(int[]项,int[]折扣,ref int itemsbund,ref int折扣项)
{
int-idx=0;
对于(idx=0;itemsbunk>items[idx]| | idx>items.Length;idx++)
{
折扣项目=折扣[idx];
}
}
私有静态void输入项(ref int itemsbund)
{
Console.WriteLine(“输入您购买的物品数量”);
而(!int.TryParse(Console.ReadLine(),out itemsbound))
如果(项目应<0)
{
Console.WriteLine(“错误,仅限大于0的整数”);
}
Console.WriteLine(“错误,仅限大于0的整数”);
}
}
}
当输入大于61的数字时,我会出现“索引超出范围”错误。如何使输入的数字大于61时显示15?还有,我怎样才能使这个边界包含61和61以上,而不是61给出10的输出
此外,每次输入某个信息时,仅当数字小于0或双精度时才会显示错误消息。要显示您所犯的小错误,请参阅此更正版本:
for (idx = 0; idx < items.Length && itemsbought > items[idx]; idx++)
for(idx=0;idxitems[idx];idx++)
有三个重要的变化:
private static void getDiscount(int[] items, int[] discount, int itemsbought, ref int discountItem)
{
int idx = 0;
for (idx = 0; idx < items.Length && itemsbought > items[idx]; idx++)
discountItem = discount[idx];
}
private static void get折扣(int[]项、int[]折扣、int itemsbund、ref int折扣项)
{
int-idx=0;
对于(idx=0;idxitems[idx];idx++)
折扣项目=折扣[idx];
}
但我更愿意将条件放入循环中,以使其更具可读性:
private static void getDiscount(int[] items, int[] discount, int itemsbought, ref int discountItem)
{
for (int i = 0; i < items.Length; i++)
{
if(itemsbought > items[i])
discountItem = discount[i];
else
break;
}
}
private static void get折扣(int[]项、int[]折扣、int itemsbund、ref int折扣项)
{
对于(int i=0;i项目[i])
折扣项目=折扣[i];
其他的
打破
}
}
来解决你的另一个问题 此外,每次我输入一些内容时,仅当数字小于0或双精度时,才会显示错误消息
正确地重新格式化您的代码,一条消息输出在正确的位置,另一条消息总是被执行。我将重写您的
getDiscount
,如下所示:
private static void getDiscount(int[] items, int[] discount, ref int itemsbought, ref int discountItem)
{
for (int i = 0; itemsbought > items[i];)
{
discountItem = discount[i];
i++;
if (i >= items.Length)//will return the last element in the discount array(15)
break;
}
}
出现错误的原因是items数组中不包含大于61的数字,因此for循环将继续,您可以中断它以返回折扣数组中的最后一个元素(15)
然后重写InputItems
方法,如下所示:
private static void InputItems(int itemsbought)
{
Console.WriteLine("Enter the amount of items you bought");
if (!int.TryParse(Console.ReadLine(), out itemsbought) || itemsbought < 0)
{
Console.WriteLine("Error, whole numbers over 0 only");
}
}
私有静态void InputItems(int itemsbund)
{
Console.WriteLine(“输入您购买的物品数量”);
如果(!int.TryParse(Console.ReadLine(),out itemsbunk)| | itemsbunk<0)
{
Console.WriteLine(“错误,仅限大于0的整数”);
}
}
无论tryparse/if语句是否成功,都将返回相同的错误消息。您还需要更新对
InputItems(itemsbound)的调用代码>看待问题的不同方式,但您可以选择使用它
public class Item
{
public Item(string name, int qty)
{
ItemName = name;
Qty = qty;
}
public enum DiscountRate
{
ZeroPercent = 0,
FivePercent = 10,
TenPercent = 26,
FifteenPercent = 61
}
public override string ToString()
{
return string.Format("Items Name: {0} | Units: {1} | Discount Rate: {2}", this.ItemName, this.Qty, this.Rate.ToString() );
}
public string CalculateDiscount()
{
if (this.Qty >= (int)DiscountRate.FifteenPercent)
{
this.Rate = DiscountRate.FifteenPercent;
return this.ToString();
}
else if (this.Qty >= (int)DiscountRate.TenPercent && this.Qty < (int)DiscountRate.FifteenPercent)
{
this.Rate = DiscountRate.TenPercent;
return this.ToString();
}
else if (this.Qty < (int)DiscountRate.TenPercent && this.Qty > 9)
{
this.Rate = DiscountRate.FivePercent;
return this.ToString();
}
else
{
this.Rate = DiscountRate.ZeroPercent;
return this.ToString();
}
}
public string ItemName { get; set; }
public int Qty { get; set; }
public DiscountRate Rate {get; set;}
}
class Program
{
static void Main(string[] args)
{
Item a = new Item("Tennis Ball", 100);
Item b = new Item("Spoon", 10);
Item c = new Item("Candles", 27);
Item d = new Item("Battery's", 2);
Item e = new Item("Nails", 10);
Item f = new Item("Marbles", 0);
Console.WriteLine(a.CalculateDiscount());
Console.WriteLine();
Console.WriteLine(b.CalculateDiscount());
Console.WriteLine();
Console.WriteLine(c.CalculateDiscount());
Console.WriteLine();
Console.WriteLine(d.CalculateDiscount());
Console.WriteLine();
Console.WriteLine(e.CalculateDiscount());
Console.WriteLine();
Console.WriteLine(f.CalculateDiscount());
Console.WriteLine();
Console.ReadLine();
}