我需要在for循环中添加以下间隔(我尝试使用if语句,老师让我减少编码量。)
Intervals (Pizza Diameters)
12 - 20 = 8 slices
21 - 24 = 12 slices
25 - 30 = 16 slices
31 - 36 = 24 slices
以下代码为我提供了非常接近我需要的输出,除了它不符合上述条件。例如,如果我输入24,它应该只给出8和12个切片的输出。
int[] pizzaSlices = new int[4] { 8, 12, 16, 24 };
for (int i = pizzaSlices[0]; i < inputDiameter; i++) {
if (i == pizzaSlices[0] || i == pizzaSlices[1] || i == pizzaSlices[2] ||
i == pizzaSlices[3]) {
Console.WriteLine("cut in " + i + " slices results in a slice area of " +
Math.Round(areaOfThePizza / i, 2) + " per slices");
}
}
当前输出:
期望的输出:
答案 0 :(得分:2)
我无法抗拒添加一些LINQ'y解决方案:
[Test]
[TestCase(37, Result = 0)]
[TestCase(36, Result = 24)]
[TestCase(35, Result = 24)]
[TestCase(30, Result = 16)]
[TestCase(29, Result = 16)]
[TestCase(26, Result = 16)]
[TestCase(22, Result = 12)]
[TestCase(12, Result = 8)]
[TestCase(11, Result = 0)]
[TestCase(10, Result = 0)]
public int GetNumberOfSlices(int diameter)
{
var pizzas = new[] {
new[] { 11, 0 },
new[] { 20, 8 },
new[] { 24, 12 },
new[] { 30, 16 },
new[] { 36, 24 }
};
var pizza = pizzas.FirstOrDefault(p => diameter <= p[0]);
return pizza == null ? 0 : pizza[1];
}
答案 1 :(得分:1)
我添加了另一个int
数组来保存披萨直径。 for
循环从0
迭代到pizzaSlices
的长度,因此0
到3
。
if
循环中的for
语句检查用户输入的直径是否在当前迭代的pizzaDims
对应范围内。
int[] pizzaSlices = new int[4] { 8, 12, 16, 24 };
int[] pizzaDims = new int[4] { 12, 21, 25, 31 }; // pizza diameters array
if(inputDiameter >= smallest) {
for (int i = 0; i <= pizzaSlices.Length; i++) {
if(inputDiameter >= pizzaDims[i] {
Console.WriteLine("cut in " + pizzaSlices[i] +
" slices results in a slice area of " +
Math.Round(areaOfThePizza / pizzaSlices[i], 2) +
" per slices");
} else {
break; // no need to continue iterating, if one condition is false then
// the rest will be as well
}
}
}