我希望得到一个整数数组并检查两个数字,第一个数字是我要替换的数组中的数字,第二个数字是我想要替换第一个数字的数字。我已设法编写代码来破坏性地和建设性地执行此操作,但我想仅将第一次出现的数字更改为第二个数字,而不是所有条目。
例如,如果我要输入{3,5,1,3,6}和3作为我想要替换的数字,而9作为我想要替换它的数字,我应该得到{9,5 ,1,3,6}因为我只想将第一次出现更改为3到9,而不是两者。
import java.util.*;
public class Ex6 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
Scanner scanner = new Scanner(System.in);
System.out.println("Enter some numbers. When you're done, type 999");
boolean cont = true;
while (cont == true) {
int x = scanner.nextInt();
if (x == 999) {
cont = false;
} else {
list.add(x);
}
}
System.out.println("Enter a number to replace");
Scanner sc = new Scanner(System.in);
int numberCompare = sc.nextInt();
System.out.println("Enter the number you want to replace it with");
Scanner sc2 = new Scanner(System.in);
int numberReplace = sc2.nextInt();
changeD(list, numberCompare, numberReplace);
System.out.println(Arrays.toString(list.toArray()));
//System.out.println(changeC(list, numberCompare, numberReplace));
}
public static ArrayList<Integer> changeD(ArrayList<Integer> list, int numberCompare, int numberReplace) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == numberCompare) {
list.set(i, numberReplace);
}
}
return list;
}
/*I am only using one method at a time, depending on what I wish to
test. The above changes
destructively and below changes constructively*/
/*public static ArrayList<Integer> changeC(ArrayList<Integer> list, int
numberCompare, int numberReplace) {
ArrayList<Integer> b = new ArrayList<Integer>();
for(int i = 0; i<list.size(); i++) {
int x = list.get(i);
b.add(x);
}
for(int j = 0; j<b.size(); j++) {
if(b.get(j) == numberCompare) {
b.set(j, numberReplace);
}
}
return b;
}*/
}
我也很好奇main方法中的代码将用户输入添加到ArrayList中。是否有更好的方法,不要求用户输入999
以突破while
循环。
答案 0 :(得分:2)
在if:
中添加break语句if (list.get(i) == numberCompare) {
list.set(i, numberReplace);
break;
}
这样,第一次条件为真时,循环就会被中断。
答案 1 :(得分:2)
因此,请勿更改List
的下一个值
实际上你会迭代每个元素
您应该在设置值后立即停止。
此外,该方法应该不返回任何内容
您返回作为参数传递的对象。它不是必需的,您也不要在客户端使用它
最后,按界面编程。优先List
超过ArrayList
声明的类型。
List<Integer> list = new ArrayList<>();
...
public static void changeD(List<Integer> list, int
numberCompare, int numberReplace) {
for(int i = 0; i<list.size(); i++) {
if(list.get(i) == numberCompare) {
list.set(i, numberReplace);
return;
}
}
}