您是否可以防止以很小的差异重复编写代码?

时间:2018-08-29 19:15:46

标签: java android

我正在使用特定的Java代码分配块,目前在一页上,我使用了30多次。这是因为在我进行的每个比较中,每个代码块中所有数字都需要加1。 (示例1)有没有一种方法可以编写一些使使用中的数字增加1的代码(就像您通常使用增量代码一样)。如果是这样,则在调用资源时也可以这样做(示例2)

特定的代码块:

//        Comparison 1
    if (Uinput1.equals(answer1)) {
        edit1.setBackgroundColor(Color.parseColor("#00FF00"));
    }
    else {
        edit1.setBackgroundColor(Color.parseColor("#FF0000"));
    }

第二次使用,等等。

//        Comparison 2
    if (Uinput2.equals(answer2)) {
        edit2.setBackgroundColor(Color.parseColor("#00FF00"));
    }
    else {
        edit2.setBackgroundColor(Color.parseColor("#FF0000"));
    }

声明资源等

 private String answer1;
 private String answer2;`

 this.answer1 = getString(R.string.answer1);
 this.answer2 = getString(R.string.answer2);`

 this.answer1 = getString(R.string.answer1);
 this.answer2 = getString(R.string.answer2);

 this.edit1 = findViewById(R.id.edit1);
 this.edit2 = findViewById(R.id.edit2);

 String Uinput1 = edit1.getText().toString();
 String Uinput2 = edit2.getText().toString();

编辑:

我在第一部分中使用了

private String[] answers = {"example", "example"}

4 个答案:

答案 0 :(得分:3)

经常在变量名称中看到数字(即float var1),现在是使用数组的好时机。

在这种情况下,您可以使用如下数组:

private String[] answers = new String[2];

private String[] answers = {"foo", "bar"}

然后您可以像这样访问数组的每个索引:

System.out.println(answers[0]); //prints "foo"

或者,您可以使用for循环对数组的每个索引执行操作。

for(int i = 0; i < answers.length; i++){
  System.out.println(answers[i]);
}

答案 1 :(得分:2)

您可以执行以下操作:

function(a,b,c){
if (a.equals(b)) {
    c.setBackgroundColor(Color.parseColor("#00FF00"));
}
else {
    c.setBackgroundColor(Color.parseColor("#FF0000"));  }

}

答案 2 :(得分:1)

有很多方法可以避免重复代码行

1.Arrays :您可以在安静的情况下轻松使用数组

int inputs=2;
String[] Uinput=new String[inputs]
String[] Answers=new String[inputs]
EditText[] Edit=new EditText[inputs]

您可以使用for循环对其进行初始化

for(int i=0;i<inputs;i++){
 int resID = getResources().getIdentifier("answer"+(i+1), "id",getPackageName());
 Edit[i]=((EditText) findViewById(resID));
 Uinputs[i]=Edit[i].getText().toString();
 resID=getResources().getIdentifier("edit"+(i+1), "string",getPackageName());
 Answer[i]=getResource(resID)
}

您只需操纵i的值即可轻松进行比较

if (Uinput[i].equals(Answer[i])) {
    Edit[i].setBackgroundColor(Color.parseColor("#00FF00"));
}
else {
    Edit[i].setBackgroundColor(Color.parseColor("#FF0000"));
}

2.Functions :您可以将函数用于比较部分,但声明起来会很困难

void Compare(String Uinput,String answer,EditText edit){
    if (Uinput.equals(answer)) {
       edit.setBackgroundColor(Color.parseColor("#00FF00"));
    }
    else {
       edit.setBackgroundColor(Color.parseColor("#FF0000"));
    }

}

我本人使用函数来减少重复,但是在这种情况下,使用数组会很合理。您可以通过使用数组将两者结合起来,并且仅在调用函数时使用数组的值作为参数

 Compare(Uinput[i],Answer[i],Edit[i])

答案 3 :(得分:0)

在这种情况下,即使仅因为HashMaps是为了进行这种比较而设计,我还是会远离数组。如果将问题/答案对保存在哈希图中,则可以创建一个方法来接受问题和答案字符串,并返回一个布尔值,指示是否存在匹配项。这将降低您所看到的复杂性,并避免需要所有这些额外的字符串声明。