簡體   English   中英

較大數組的最后一個元素索引

[英]Last element index of an array with larger size

char[] someArray = new char[10];
someArray[0] ='a';
someArray[0] ='b';
someArray[0] ='c';

我想在第4個位置添加“ d”。 如何獲得比數組中最后一個有效元素索引大一的索引? someArray.length-1返回9。我想獲得第4位?

編輯:該代碼應為:

char[] someArray = new char[10];
someArray[0] ='a';
someArray[1] ='b';
someArray[2] ='c';

在這種情況下,我知道第4個索引是免費的。 如果我有:

void abc(int[] x){
     //I want to add element in the next free index of the array x.
}

數組中的索引從0開始。

當您執行someArray.length-1 ,它將使用使用初始化時的長度
char[] someArray = new char[10];

如果希望到達數組的第4個位置,請從第0個索引開始計數,您會發現需要在數組中使用索引3,因此您可能需要使用
someArray[3] = desired_value

您可以使用一種方法來找出數組中第一個空位置的索引號:

public static int getFirstEmptyIndex(char[] arr){
    int index=0;
    for(char a:arr){
      if(a==0)
      break;
      else
        index++;
    }
    return index;
  }
public static void main(String[] args) {
    char[] someArray = new char[10];
    someArray[0]='a';
    someArray[1]='b';
    someArray[2]='c';
    someArray[getFirstEmptyIndex(someArray)]='d';    
    System.out.println(someArray[3]);
  }

首先,但要做someArray[0] = .. ,請將char設置在數組的第一個位置,然后在代碼中的此位置覆蓋此值。

其次,您的問題的答案是通過執行someArray[3] = 'd' 只要您未達到超出數組大小的索引,數組中的所有元素都是有效的。

這是我認為您需要的,類似於@Mohsen的答案,只是我認為這將更易讀和直接。

private int nextFree(char[] arr){
        int i = 0;
        for(Character x : arr){
            if(x == 0)
                return i;
            i++;
        }

        return -1;
    }

因此,如果沒有可用空間,則得到-1,而不是得到0並意外替換索引0的值。

獎勵::如果要按升序將所有可用空間作為數組獲得,請看下面:

private int[] allFree(char[] ar){
        int s = 0;
        for(char c : ar){
            if(c==0)
                s++;
        }

        int[] k= new int[s];
        s=0;
        int ss=s;

        for(char c : ar){
            if(c==0){
                k[ss] = s;
                ss++;
            }
            s++;
        }

        return k;
    }

順便說一下,這不是用於此類操作的最佳算法,任何人都可以隨意改進它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM