我知道有几个与此主题相关的主题,但是我没有找到答案。因此,我用static void Main(string[] args)
{
double radius, hoehe, umfang, volumen, oberfl;
Console.WriteLine("Radius des Zylinders eingeben: ");
while (!double.TryParse(Console.ReadLine(), out radius))
{
Console.WriteLine("Wert ist ungültig! Bitte erneut versuchen.");
}
Console.WriteLine("Hoehe des Zylinders eingeben: ");
while (!double.TryParse(Console.ReadLine(), out hoehe))
{
Console.WriteLine("Wert ist ungültig! Bitte erneut versuchen.");
}
umfang = 2 * Math.PI * radius;
volumen = Math.PI * Math.Pow(radius, 2) * hoehe;
oberfl = umfang * (radius + hoehe);
Console.WriteLine("Umfang: {0:f2}", umfang);
Console.WriteLine("Volumen: {0:f2}", volumen);
Console.WriteLine("Oberfläche: {0:f2}", oberfl);
Console.ReadKey();
}
检查了正确的值,但是我还必须检查它们是否为负值:
while (!double.TryParse(Console.ReadLine(), out radius) && radius <=0)
首先我想只是将其添加到while语句中,例如
Map<Entity, List<Funder>> initMap = new HashMap<>();
List<Entity> entities = pprsToBeApproved.stream()
.map(fr -> fr.getBuyerIdentification().getBuyer().getEntity())
.distinct()
.collect(Collectors.toList());
for(Entity entity : entities) {
List<Funder> funders = pprsToBeApproved.stream()
.filter(fr -> fr.getBuyerIdentification().getBuyer().getEntity().equals(entity))
.map(fr -> fr.getDocuments().get(0).getFunder())
.distinct()
.collect(Collectors.toList());
initMap.put(entity, funders);
}
但这不起作用。那么您能告诉我另一种可能性,也许是另一种if陈述吗?
答案 0 :(得分:4)
将&&
更改为||
。由于||
在第一个表达式之后停止以被评估为true,则:
&&
那样检查第二个条件-这就是问题所在)<= 0
,它将再次迭代。因此,如果输入为正整数,它将停止迭代。
while (!double.TryParse(Console.ReadLine(), out radius) || radius <=0)
还(至少)两次使用此代码,也许将其封装在函数中?
public double GetPositiveDouble()
{
double result;
while (!double.TryParse(Console.ReadLine(), out result))
{
Console.WriteLine("Wert ist ungültig! Bitte erneut versuchen.");
}
return result;
}
答案 1 :(得分:1)
您可以使用接受double.TryParse
标志的NumberStyles
重载。如果您期望没有符号的浮点数(例如,只有非负数),则可以指定:
double.TryParse(
Console.ReadLine(),
NumberStyles.AllowDecimalPoint,
CultureInfo.CurrentCulture,
out var radius)
如果数字带有符号(-
或+
)并且您知道指定的数字始终为非负数,则它将返回false。
请注意,如果数字0.0恰恰不是您想要的,它将返回true。
如果您还希望允许使用空格和指数表示法等,则必须提供其他NumberStyles
标志。
答案 2 :(得分:0)
您的条件是错误的。它应显示为:
while (!(double.TryParse(Console.ReadLine(), out radius) && radius > 0))
答案 3 :(得分:0)
您的代码可以正常工作...应该是OR,而不是AND:
while (!double.TryParse(Console.ReadLine(), out radius) || radius <=0)