Java 根据数组中已存储的整数检查整数变量

Java 根据数组中已存储的整数检查整数变量,java,arrays,Java,Arrays,免责声明:对代码仍然很陌生,只掌握java的基本技能。试着在自己和别人身上尽可能多地学习。目前没有在大学学习 大家好 我试图创建一个小容量(5个整数)的数组,以便在每个数组元素中存储随机生成的整数。随机生成的整数在设定的范围(0-75)内,我对此没有问题 我不知道如何生成一个新的整数,然后在存储它并继续下一个之前,对照每个数组元素中当前存在的整数检查它 我尝试的是: public class ItemSet { public static void main(String []args) {

免责声明:对代码仍然很陌生,只掌握java的基本技能。试着在自己和别人身上尽可能多地学习。目前没有在大学学习

大家好

我试图创建一个小容量(5个整数)的数组,以便在每个数组元素中存储随机生成的整数。随机生成的整数在设定的范围(0-75)内,我对此没有问题


我不知道如何生成一个新的整数,然后在存储它并继续下一个之前,对照每个数组元素中当前存在的整数检查它

我尝试的是:

public class ItemSet
{
public static void main(String []args)
 {
 int[] itemSet;
 itemSet = new int[5];

 itemSet[0] = 0; /* to initialise the array elements. Im not sure if i actually have to do this or not */
 itemSet[1] = 0;
 itemSet[2] = 0;
 itemSet[3] = 0;
 itemSet[4] = 0;

 int count = 1;
 int assignItem = 0;
 int countTwo = 1;
 while (count > 5) {  
   while (countTwo == 1) {  
     assignItem = (int)(Math.random()*76); 
  // here is where i get totally lost
     if (assignItem.compareTo(itemSet)) { 
       countTwo = 1;
     } else {
       itemSet[(count--)] = assignItem; 
       countTwo = 0; 
     }
     }
     count = count++;
    }
 }
}
我看了这么久,我的头开始痛了。如果您能给我任何建议,我将不胜感激。:)先谢谢你。xx


编辑:在任何“如何测试数组是否包含特定值”类型的问题中都找不到我需要的解决方案,因为如果数字恰好与先前生成的另一个整数相同,我需要在将其自身存储到数组元素之前使其再次随机化。

你做的太多了,不能只填充一个数组。要填充数组,请尝试使用“for”循环,如下所示:

public class ItemSet {
    public static void main(String []args) {
        int[] itemSet;
        itemSet = new int[5];

        int count = 1;
        int assignItem = 0;
        int countTwo = 1;

        for (int i = 0; i < itemSet.length; i++) {
            itemSet[i] = (int) (Math.random() * 76);
        }
    }
}
要在存储下一个整数之前检查这些值,(比如确保新存储的值是唯一的),可以使用一个嵌套的for循环,该循环从外部循环下面的值开始,并向后移动,将之前的每个值与刚存储的值进行比较,如果它们相同,它将减少外部计数器,然后覆盖下一个循环中的数据:

import java.util.Arrays; // you need this to use Arrays.toString()

public class ItemSet {
    public static void main(String []args) {
        int[] itemSet;
        itemSet = new int[5];

        int count = 1;
        int assignItem = 0;
        int countTwo = 1;

        for (int i = 0; i < itemSet.length; i++) {
            itemSet[i] = (int) (Math.random() * 76);
            for (int j = i - 1; j >= 0; j--) {
                if (itemSet[j] == itemSet[i]) {
                    System.out.println("Comparing " + itemSet[j] +
                        " and " + itemSet[i]);
                    i--;
                    break; // not really needed but illustrates a way to exit a loop immediately
                }
            }
        }

        // this is a handy way to print all the data in an array quickly
        System.out.println(Arrays.toString(itemSet));
    }
}
import java.util.Arrays;//使用Arrays.toString()时需要这个
公共类项目集{
公共静态void main(字符串[]args){
int[]项目集;
itemSet=newint[5];
整数计数=1;
int assignItem=0;
int countTwo=1;
for(int i=0;i=0;j--){
if(itemSet[j]==itemSet[i]){
System.out.println(“比较”+项目集[j]+
“和”+项目集[i]);
我--;
break;//实际上不需要,但说明了立即退出循环的方法
}
}
}
//这是一种快速打印阵列中所有数据的简便方法
System.out.println(Arrays.toString(itemSet));
}
}
公共静态void main(字符串[]args){
//不需要用零初始化数组
int[]项目集=新的int[5];
int计数器=0;
while(计数器
解决此问题的方法有很多,我建议您使用一种帮助方法来查找阵列中的重复项。这将是一个有效的例子:

public static void main(String[] args) {
    int[] itemSet;
    itemSet = new int[5];
    int assignItem;

    for (int i = 0; i < 5; i++) {
        assignItem = (int)(Math.random()*76);
        if(!duplicate(assignItem,itemSet,i)){
            itemSet[i] = assignItem;
        }
    }
}

private static boolean duplicate(int assignItem, int[] itemSet, int i) {
    for (int j = 0; j < i; j++) {
        if (assignItem == itemSet[j])
            return true;
    }
    return false;
}
publicstaticvoidmain(字符串[]args){
int[]项目集;
itemSet=newint[5];
国际转让项目;
对于(int i=0;i<5;i++){
assignItem=(int)(Math.random()*76);
如果(!重复(assignItem,itemSet,i)){
itemSet[i]=分配项目;
}
}
}
私有静态布尔复制(int assignItem,int[]itemSet,int i){
对于(int j=0;j
我很难理解你的要求,但我还是会试试看,希望这就是你想要的:

for (int count = 0; count < 5 ; count++) {
 assignItem = (int)(Math.random()*76);
 if (assignItem==itemSet[count]&&itemSet[count]!=0) {
     //If true do this
 }
 else {
     itemSet[count] = assignItem;

 }
}
for(int count=0;count<5;count++){
assignItem=(int)(Math.random()*76);
if(assignItem==itemSet[count]&&itemSet[count]!=0){
//如果是真的,请这样做
}
否则{
itemSet[计数]=分配项目;
}
}

检查生成的数字是否等于某个位置,如果该位置为空(0),如果不等于(新的数字),则将为数组赋值。

最直接的方法是在插入当前随机值之前通过数组检查现有值

  • 生成一个随机值
  • 检查数组中是否存在值
  • 如果数组中已存在,则生成另一个值
  • 如果数组中不存在,请将值设置为当前元素
  • 在代码中:

    public static void main(String[] args){
        int idx = 0;
        int[] myArray = new int[5];
        Random rnd = new Random();
        int val = rnd.nextInt(76);
        do{
            if(numExistInArray(val, myArray))
                val = rnd.nextInt(76);    //if val exist in array, generate another number
            else
                myArray[idx++] = val;     //if val not exist in array, fill array
        }while(idx != myArray.length);    //do not exit loop till all numbers are filled        
    }
    
    public static boolean numExistInArray(int val, int[] array){
        for(int x=0; x<array.length; x++)
            if(array[x] == val)
                return true;
        return false;
    }
    
    publicstaticvoidmain(字符串[]args){
    int-idx=0;
    int[]myArray=新的int[5];
    随机rnd=新随机();
    int val=rnd.nextInt(76);
    做{
    if(numExistInArray(val,myArray))
    val=rnd.nextInt(76);//如果数组中存在val,则生成另一个数字
    其他的
    myArray[idx++]=val;//如果数组中不存在val,则填充数组
    }while(idx!=myArray.length);//在填充所有数字之前不要退出循环
    }
    公共静态布尔numExistInArray(int-val,int[]数组){
    
    对于(int x=0;x如果您知道您的设置范围(0-75),并且空间不是问题,我建议维护一个未使用的整数池。这将保证每个值都是唯一的,并避免迭代整数数组以检查重复:

    public static void main(String[] args) {
    
        List<Integer> unusedNumbers = new ArrayList();
        // Populate list with values
        for (int i = 0; i <= 75; i++) unusedNumbers.add(i);
    
        int[] itemSet = new int[5];
    
        for (int i = 0; i < 5; i++) {
            int randomIndex = (int) (Math.random() * unusedNumbers.size());
            int randomInt = unusedNumbers.remove(randomIndex);
            itemSet[i] = randomInt;
        }
    }
    
    publicstaticvoidmain(字符串[]args){
    List unusedNumbers=new ArrayList();
    //用值填充列表
    
    对于(int i=0;i“对照每个数组元素中当前存在的整数检查它”检查它的原因是什么?“我不确定我是否真的必须这样做”不需要。根据规范,数组元素被初始化为类型的默认值,
    int
    的默认值为零。简而言之,您不想存储重复的元素。对吗?编辑的可能重复,以尝试解释它与该问题的不同。是的,我需要检查元素以确保
    public static void main(String[] args){
        int idx = 0;
        int[] myArray = new int[5];
        Random rnd = new Random();
        int val = rnd.nextInt(76);
        do{
            if(numExistInArray(val, myArray))
                val = rnd.nextInt(76);    //if val exist in array, generate another number
            else
                myArray[idx++] = val;     //if val not exist in array, fill array
        }while(idx != myArray.length);    //do not exit loop till all numbers are filled        
    }
    
    public static boolean numExistInArray(int val, int[] array){
        for(int x=0; x<array.length; x++)
            if(array[x] == val)
                return true;
        return false;
    }
    
    public static void main(String[] args) {
    
        List<Integer> unusedNumbers = new ArrayList();
        // Populate list with values
        for (int i = 0; i <= 75; i++) unusedNumbers.add(i);
    
        int[] itemSet = new int[5];
    
        for (int i = 0; i < 5; i++) {
            int randomIndex = (int) (Math.random() * unusedNumbers.size());
            int randomInt = unusedNumbers.remove(randomIndex);
            itemSet[i] = randomInt;
        }
    }