我有这个练习,我必须为我的课做。我无法改变方法的工作方式,这是一个非常愚蠢的方法。我想知道,如果有更优雅的方式保证这种方法不能使用负数。我用了一个非常大的if:
void abreTeatro(int codigoCamarote, int capacidadeCamarote,
int precoCamarote, int codigoFrente, int capacidadeFrente,
int precoFrente, int codigoMeio, int capacidadeMeio,
int precoMeio, int codigoFundo, int capacidadeFundo,
int precoFundo)
{
if ((codigoCamarote > 0) && (capacidadeCamarote > 0)
&& (precoCamarote > 0) && (codigoFrente > 0)
&& (capacidadeFrente > 0) && (precoFrente > 0)
&& (codigoMeio > 0) && (capacidadeMeio > 0)
&& (precoMeio >0) && (codigoFundo > 0)
&& (capacidadeFundo > 0) && (precoFundo > 0))
{
//do Something};
}
}
这是一个丑陋的代码...... 即使我仍然使用代码的IF部分,是否有一种替代语法可以用来使这段代码更具代表性?
答案 0 :(得分:4)
听起来你应该在这里有对象 - camarote
对象,frente
对象,meio
对象,fundo
对象 - 每个对象有三个字段,由构造函数保证为非负字段。
答案 1 :(得分:2)
如果你不能按照路易斯的建议使用构造函数方法,那么试试这个
void abreTeatro(int... values) {
for(int val: values) {
if(val <=0) {
// print error if needed
return;
}
}
// Code here assuming everything is +ve
// you have an array in values, so you have to retrieve the values in the same order as in the calling method
}
答案 2 :(得分:2)
您可以使用辅助方法:
public static boolean allPositive(int... numbers)
{
for(int number : numbers)
{
if(number < 0)
return false;
}
return true;
}
然后使用例如。
if (allPositive(codigoCamarote,capacidadeCamarote,precoCamarote,codigoFrente,capacidadeFrente,precoFrente,codigoMeio,capacidadeMeio,precoMeio,codigoFundo,capacidadeFundo,precoFundo)
{
//do Something
};
或者,要消除括号使用:
if(!allPositive(...))
return;
// do something