using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace switch_calculator
{
class Program
{
static void Main(string[] args)
{
double num1, num2;
char opt;
Console.WriteLine("Enter num1");
num1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter num2");
num2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Select the operation you would like to perform" );
Console.WriteLine("Press \n 'A' for Add \n 'S' for subtraction
\n 'D' for Division \n 'M' for multiplicatiion \n 'R' for Remainder");
opt = Convert.ToChar(Console.ReadLine());
switch(opt)
{
case 'A':
Console.WriteLine("your Add result {0} + {1} is {2}", num1, num2, num1+num2);
break;
}
Console.ReadLine();
}
}
}
答案 0 :(得分:1)
Console.WriteLine("your Add result {0} + {1} is {2}", num1, num2, num1+num2);
让我解释一下这里的意思:
Console.WriteLine(string text, params object[] obj);
这是没有值的方法。 如您所见,您可以为其打印一个字符串以及参数列表。
运行此方法时,将填充以下值:
text = "your Add result {0} + {1} is {2}";
obj = new object[3];
obj[0] = num1;
obj[1] = num2;
obj[2] = num1+num2;
现在格式化程序所做的是将ToString()
- 方法返回的对象的值放在给定的索引处。
让我们假设num1
为4
且num2
为5
。
"your Add result {0} + {1} is {2}"
将像这样填充
"your Add result 4 + 5 is 9"
但是如果你改变索引让我们说
"your Add result {2} + {0} is {1}"
它会像这样
"your Add result 9 + 4 is 5"
如果您提供数组中不存在的string
索引(例如{7}
),则应用程序将崩溃,说明请求的索引(在本例中为7
)是null
。这将是System.FormatException
。
如果您尝试在大小为7
元素的数组中获取索引4
的值,那将是相同的。
答案 1 :(得分:1)
不,占位符需要一个从格式字符串后面的第一个参数索引的数字,从零开始。
因此Console.WriteLine("Hello, {0}!", "World")
将打印"Hello, World!"
,Console.WriteLine("Hello, {1}!", "ignored", "World")
将打印相同的内容。
您无法索引不存在的参数。
我想你想要改变每个操作的单词“Add”,而不必重复整个格式字符串。
你可以通过准备一个包含所有正确占位符的字符串来做到这一点,然后在适当的case
块中分配它们:
string format = "Your {0} result is {1} {2} {3} = {4}";
string operation = "";
string symbol = "";
double result = 0;
switch(opt)
{
case 'A':
operation = "Add";
symbol = "+";
result = num1 + num2;
break;
case 'S':
operation = "Subtract";
symbol = "-";
result = num1 - num2;
break;
break;
...
}
现在你可以打印整行:
string format = "Your {0} result is {1} {2} {3} = {4}";
...
Console.WriteLine(format, operation, num1, symbol, num2, result);
答案 2 :(得分:0)
简单地说,您不能为不存在的值提供格式化的说明符。例如:
Console.WriteLine("{1}", "test");
会抛出FormatException
,因为只提供了一个参数(数组基于0)。
答案 3 :(得分:0)
不,你不能。语法糖是使用# lower-level module
class CustomError(Exception):
pass
# in method
Class Thing:
def __init__(prop1):
self.prop1 = prop1
def method(self,element):
try:
dependency.function(element,self.prop1)
except ValueError as err:
if str(err) == 'specific ValueError':
raise CustomError
else:
raise # re-raise ValueError because string not recognized
# back in higher-level module
thing = lowerlevelmodule.Thing(prop1)
for element in list_of_stuff:
try:
output = thing.method(element)
except CustomError:
output = None
warnings.warn('set output to None for {} because CustomError'.
format(element))
。而且您仍然无法更改占位符的索引。他们总是从0开始