Java 你能防止反复编写代码而产生微小的差异吗?

Java 你能防止反复编写代码而产生微小的差异吗?,java,android,Java,Android,我正在使用一个特定的Java代码块allot,目前在一个页面上我已经使用了30多次。这是因为在每个代码块中,每次比较时,所有数字都需要增加1。(示例1)有没有一种方法可以编写一些代码,将使用的数字增加1(就像通常使用增量代码一样)。如果是这样,在调用资源时也可以这样做(示例2) 特定代码块: // Comparison 1 if (Uinput1.equals(answer1)) { edit1.setBackgroundColor(Color.parseC

我正在使用一个特定的Java代码块allot,目前在一个页面上我已经使用了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”}
您可以执行以下操作:

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

}您可以执行以下操作:

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

}

当您在变量名(即float var1)中看到数字时,通常是使用数组的好时机

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

private String[] answers = new String[2];
System.out.println(answers[0]); //prints "foo"

然后,您可以按如下方式访问数组的每个索引:

private String[] answers = new String[2];
System.out.println(answers[0]); //prints "foo"
或者,可以使用for循环对数组的每个索引执行操作

for(int i = 0; i < answers.length; i++){
  System.out.println(answers[i]);
}
for(int i=0;i
当您在变量名(即float var1)中看到数字时,通常是使用数组的好时机

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

private String[] answers = new String[2];
System.out.println(answers[0]); //prints "foo"

然后,您可以按如下方式访问数组的每个索引:

private String[] answers = new String[2];
System.out.println(answers[0]); //prints "foo"
或者,可以使用for循环对数组的每个索引执行操作

for(int i = 0; i < answers.length; i++){
  System.out.println(answers[i]);
}
for(int i=0;i
有很多方法可以避免重复代码行

1.数组:您可以轻松地在案例中使用数组

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)
}
2.函数:您可以将函数用于比较部分,但这对于声明来说很困难

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

}
我自己使用函数来减少重复,但在yiur的情况下,使用数组会更合理。您可以通过使用数组将两者结合起来,并在调用函数时使用数组的值作为参数

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

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

1.数组:您可以轻松地在案例中使用数组

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)
}
2.函数:您可以将函数用于比较部分,但这对于声明来说很困难

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

}
我自己使用函数来减少重复,但在yiur的情况下,使用数组会更合理。您可以通过使用数组将两者结合起来,并在调用函数时使用数组的值作为参数

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

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

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

可能使用arraysA)java代码因样板文件而“出名”,特别是在android设置中,但B)一旦开始命名a1、a2。。。您可能应该使用数组、列表或某种容器。写一个将这三个东西(或它们对应的资源ID)作为参数的方法可能使用arraysA)java代码对于样板文件来说是“著名的”,特别是在android设置中,但是B)一旦开始命名东西a1、a2。。。您可能应该使用数组、列表或某种容器。编写一个方法,将这三件事(或它们对应的资源ID)作为参数这是一个正确的想法,但语法有点错误。此外,单字母变量名很少是一个好主意。这应该标记为正确的一个,只需更改变量名。这正是正确的想法,但语法有点错误。此外,单字母变量名很少是一个好主意。这应该被标记为正确的一个,只需更改您的变量名。嘿,谢谢你的回答,它工作得很好。现在我尝试这样做:
private EditText[]edits={findViewById(R.id.edit1),findViewById(R.id.edit2)}此代码不会给出任何错误,但当我运行应用程序时,它会在启动时关闭。如果可能的话,这是一种可行的方法吗?如果在这个例子中也是这样的话<代码>字符串Uinput1=编辑[1]。getText().toString()
Hmm,我看不出这行有任何问题,除了您可以使用数组来表示
R.id.edit1
R.id.edit2
。你能在a中发送更多的代码吗?我发现问题是我得到了一个
NullPointerException
(再次)。我的代码看起来是这样的,因为它是一种变通方法,所以它可以处理字符串,但不能处理
findViewById
。作为循环比较的目标,将EditText放入数组并不是优先事项。所以,如果你真的喜欢它,你可以研究它,但这不是必要的。嘿,谢谢你的回答,它工作得很好。现在我尝试这样做:
private EditText[]edits={findViewById(R.id.edit1),findViewById(R.id.edit2)}此代码不提供任何错误,但当我运行