有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在不使用java集合库的情况下向数组中添加int的基本代码?

我试图实现一个add方法,在数组中添加一个值,前提是该值不在数组中。我知道我的add方法是错误的,因为它不会在数组已满时停止。有谁能帮忙解决这个问题吗。以下是我目前的代码:

public class SimpleSet{
    private int[] data;
    int arrayIndex = 0;

    public SimpleSet(){
        data = new int[6];
        
    }
    public void add(int a){
        boolean contains = false;
        for (int z : data){
            if(z == a){
                contains = true;
                break;
            }
        }
    

    if(contains == false){
        for (int i = 0; i < data.length - 1; i++){
        data[arrayIndex] = a;
        arrayIndex++; 
         }    
    } 
  
    } 
   
} 

共 (2) 个答案

  1. # 1 楼答案

    我修改了你的代码。这是我后来一次测试的结果

    []
    [6, 24]
    [6, 24]
    [6, 24, 0]
    

    我创建了一个main方法来测试代码

    我创建了一个displaySet方法来显示数组的内容。我只显示已添加的值。其余的值无关紧要,但它们的值为零

    我创建了一个contains方法来测试要添加的新值是否已经在集合中

    我修改了add方法来测试是否超过数组限制以及是否向集合中添加值。我在整个代码中广泛使用arrayIndex值。我唯一一次使用数组的长度是用于超出数组限制测试

    下面是完整的可运行代码

    public class SimpleSet {
    
        public static void main(String[] args) {
            SimpleSet simpleSet = new SimpleSet();
            System.out.println(simpleSet.displaySet());
            simpleSet.add(6);
            simpleSet.add(24);
            System.out.println(simpleSet.displaySet());
            simpleSet.add(6);
            System.out.println(simpleSet.displaySet());
            simpleSet.add(0);
            System.out.println(simpleSet.displaySet());
        }
    
        private int[] data;
        private int arrayIndex;
    
        public SimpleSet() {
            data = new int[6];
            arrayIndex = 0;
        }
    
        public void add(int value) {
            if (arrayIndex >= data.length) {
                // Do whatever you need to here
                return;
            }
            
            if (!contains(value)) {
                data[arrayIndex] = value;
                arrayIndex++;
            }
        }
        
        private boolean contains(int value) {
            for (int index = 0; index < arrayIndex; index++) {
                if (data[index] == value) {
                    return true;
                }
            }
            
            return false;
        }
        
        public String displaySet() {
            StringBuilder builder = new StringBuilder();
            builder.append('[');
            for (int index = 0; index < arrayIndex; index++) {
                builder.append(data[index]);
                if (index < (arrayIndex - 1)) {
                    builder.append(", ");
                }
            }
            builder.append(']');
            
            return builder.toString();
        }
    
    }
    
  2. # 2 楼答案

        class SimpleSet {
    
        private final int[] data;
        int arrayIndex = 0;
    
        public SimpleSet() {
            data = new int[6];
        }
    
        public void add(int a) {
    
            if (data.length == arrayIndex) return; // or somethink else
    
            OptionalInt index = Arrays.stream(data)
                    .filter(x -> x == a)
                    .findFirst();
    
            if (!index.isPresent()) {
                data[arrayIndex] = a;
                arrayIndex++;
            }
    
        }
    
    }