我有这个代码,要求用户输入数组大小(不得超过50),并且数组大小已成功设置为数组。
我的问题出在第二段代码中。 基本上,我希望它存储用户输入的数字(有效)但是,如果数字已经给予数组,则告知用户该数字已经添加并且数字未被存储。示例:用户输入1,4,6,1。当再次给出1时,程序应该告诉用户数字1已经存储在数组中。
我可以做什么来制作程序(我可以使用artoylists .contains,但数组似乎没有这个)
public static void main(String[] args) {
Scanner reader = new Scanner (System.in);
int[] listA;
while (true) {
System.out.println("Enter array size for listA: ");
int listAsize = Integer.parseInt(reader.nextLine());
if (listAsize > 50) {
System.out.println("Array size must not exceed 50!");
} else {
listA = new int [listAsize];
//System.out.println(listA.length);
break;
}
}
int counter = 0;
while (counter < listA.length) {
System.out.print("Enter number to add to listA: ");
int inputListA = Integer.parseInt(reader.nextLine());
**if (listA.equals(listA[counter])) {**
System.out.println(inputListA + " was already added to the array, enter a different number");
} else {
listA[counter] = inputListA;
counter++;
}
}
答案 0 :(得分:2)
代码中的问题:
if (listA.equals(listA[counter]))
true
使用int listA[]
代替
HashSet<Integer>
将返回add()
答案 1 :(得分:2)
这种情况不正确:
listA.equals(listA[counter])
您需要设置一个从零到counter-1
的循环,并根据inputListA
值检查每个元素。如果有值,则循环应设置boolean
标志,如下所示:
boolean dup = false;
for (int i = 0 ; i != counter ; i++) {
if (listA[i] == inputListA) {
dup = true;
break;
}
}
// If we went through listA up to count and dup remained false,
// listA must be a new number; otherwise, it's a duplicate.
if (dup) {
System.out.println(inputListA + " was already added to the array, enter a different number");
}
答案 2 :(得分:2)
如果您需要使用数组
int counter = 0;
while (counter < listA.length) {
System.out.print("Enter number to add to listA: ");
int inputListA = Integer.parseInt(reader.nextLine());
if (found(listA,inputListA,counter)) {
System.out.println(inputListA + " was already added to the array, enter a different number");
} else {
listA[counter] = inputListA;
counter++;
}
}
public boolean found (int[]list,int num,int counter){
for(int i = 0;i<counter;i++){
if(list[i]==num)
return true;
}
return false;
}
或者您可以使用hashset获得更好的性能
答案 3 :(得分:1)
最简单和最好的解决方案是使用HashSet(http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html)
通过将用户限制为仅限于唯一元素,您说'我真的不想要一个数组,我真的想要一套&#39;
答案 4 :(得分:1)
如果必须使用数组,但不限制引入数组列表,则可以使用Arrays.asList
将其转换为数组列表。
Arrays.asList(yourArr).contains(someVal)
或者您可以编写自己的contains
方法,只需循环遍历每个元素,看它是否在数组中。
boolean hasElmt = false;
for (int val : yourArr) {
if (val == someVal) {
hasElmt = true;
break;
}
}
答案 5 :(得分:1)
因为它是一个原始数组,所以没有可以使用的方法。您必须使用for
循环遍历数组,并检查每个索引的值。
for(int i = 0; i < listA.lenght; i++) {
if(inputListA == listA[i]) {
// it's already on the array
}
}