1

値 k のすべての整数をそれ自体の k 個のコピーに置き換える必要がある scaleByK というメソッドを作成しようとしています。たとえば、メソッドが呼び出される前のリストが [2, 4, -2, 5, 3, 0, 7] の場合、[2, 2, 4, 4, 4, 4, 5, 5, 5, 5, 5, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7 ] メソッドの実行後。このメソッドは、すべての 0 と負の値をリストから削除する必要があることに注意してください。

これは私がこれまでに持っているものです

public void scaleByK(){
      for(int i=0;i<length;i++){
        if(list[i]<0||list[i]==0){
          for(int j=i+1;j<length;j++){
            list[j-1]=list[j];
          }
          length-=1;
        }
        else{
          for(int k=i;k<list[k]-1+i;k++){
            for(int x=length-1; x>k;x--){
              list[x+list[k]-1]=list[x];
            }
            for(int g=k+1; g<list[k+i];g++){
              list[g]=list[k];
            }
          }
          i=list[i]-1+i;
          length+=list[i]-1;
        }
      }
    }

メソッド開始時の length=7

メソッドを実行すると、これが得られます 2 2 4 -2 -2 5 3 0 0 7

元のリストは 2 4 -2 5 3 0 7 です

ここに私の印刷方法があります

public void print() { 
        for (int i = 0; i < length; i++) 
            System.out.print(list[i] + "  "); 
        System.out.println(); 
    }

プログラムを実行するたびに、長さが 7 にリセットされます。

4

3 に答える 3

0

ここには 2 つのバージョンがあります。最初はArrayListを使用し、次に配列のみを使用します。

public void scaleBy(int[] ints) {

    ArrayList<Integer> newInts = new ArrayList<Integer>();
    String myList = "";

    for (Integer integer : ints) {

        if (integer > 0) {

            for (int i = integer; i > 0; i--) {
                newInts.add(integer);
                myList += integer+", ";
            }
        }
    }

    System.out.println("[ "+myList.substring(0, myList.length() - 2)+" ]");
}

public void scaleByArray(int[] ints) {

    int[][] arrays = new int[10][];
    int length = 0;
    int arrayCount = 0;
    String myList = "";

    for (int integer : ints) {

        if (integer > 0) {
            length += integer;
            int[] temp = new int[integer];

            Arrays.fill(temp, integer);

            arrays[arrayCount] = temp;
            arrayCount++;
        }
    }


    int[] master = new int[length];
    int position = 0;

    for (int[] array : arrays) {
        if (array == null)
            break;

        for (int i = 0; i < array.length; i++) {
            master[position] = array[i];
            position++;
            myList += array[i]+", ";
        }
    }

    System.out.println("[ "+myList.substring(0, myList.length() - 2)+" ]");
}

どちらのバージョンも同じものを出力しますが、明らかに最初の方法が望ましいです。何か必要な場合は以下にコメントしてください。

また、構造体はorやList<>のようなプリミティブ型を保持することはできず、代わりに などのクラスでラップする必要があります。intdoubleboolInteger

于 2013-10-26T19:04:29.963 に答える