2014-02-19 5 views
0

문자열 배열의 크기를 변경하려고하지만 다른 방법을 시도하지 못하고이 방법이 작동하지 않습니다. 여기 내 코드입니다 :Java 배열 크기 변경

import java.util.Scanner; 

public class test{ 
    public static void main(String[] args){ 
     String[] names; 
     names = new String[5]; 
     for(int i=0; i<10; ++i){ 
      addToArray(names, i, "blah"); 
     } 
     System.out.println(names.length); 
     System.out.println("bye"); 
    } 

    public static void addToArray(String[] names, int i, String name){ 
     if (i < names.length){ 
      names[i] = name; 
     } 
     else { 
      String[] temp; 
      temp = new String[names.length + 10]; 
      System.arraycopy(names, 0, temp, 0, names.length); 
      addToArray(temp, i, name); 
      names = temp; 
     } 
    } 
} 

내 문제는 내가 그것을 실행할 때이 문제는, 당신은 '할 수있다 (15)

+0

가능한 중복 (http://stackoverflow.com/questions/13197702/resize 배열에서 현재 배열 요소 - 자바에서) –

+0

@ user2310289 nope. 나는 그것을 보았고, 내 노력은 제안 된 System.arraycopy를 사용했다. 내 문제에 대해서는별로 구체적이지 않지만 어레이의 길이를 인쇄 할 때는 5이고 10이 될 것으로 기대합니다. – Broseph

답변

6

말을해야 할 때, 그것은 내 배열의 마지막 길이가 5라고 인쇄이다 t는

names = temp; 

는 오직 addToArray 방법의 컨텍스트 내 names 변수의 기준을 변경하여 ... (Object) 메소드 인자 중 하나의 기준을 변경하므로. 배열이 생성되면 당신은 그 크기를 대신 return 문 ...

public static String[] addToArray(String[] names, int i, String name){ 
    if (i < names.length){ 
     names[i] = name; 
    } 
    else { 
     String[] temp; 
     temp = new String[names.length + 10]; 
     System.arraycopy(names, 0, temp, 0, names.length); 
     names = addToArray(temp, i, name); 
    } 
    return names; 
} 

메소드가 리턴 한 번 참조를 유지하는 것을 잊지 마세요 ...

for(int i=0; i<10; ++i){ 
    names = addToArray(names, i, "blah"); 
} 
2

를 사용한다 배열을 변경할 수 없습니다. 배열은 한 번 생성 된 고정 된 양의 객체를 보유 할 수 있습니다.

그러나 ArrayList은 동적으로 보유하는 객체의 양을 변경할 수 있습니다. 간단한 ArrayList을 초기화 할 수있는 방법이 될 것이다 :

ArrayList<String> stringArrayList = new ArrayList<>(); 
+0

그는 기존 배열의 크기를 변경하지 않고 더 큰 size로 복사하고 요소를 복사 한 다음 해당 임시 배열을 새 배열로 만듭니다. 그의 참조는 약간 떨어져 있습니다 ... 그는 반환을 사용해야합니다. –

+0

필자는 항상 동의 할 것이지만 OP가 수동으로 배열의 크기를 동적으로 조정하려고하는 이유에 대해 더 많은 컨텍스트가 필요합니다. 게다가, 이것은 거의 정확히'ArrayList'가하는 일입니다. 단지 필요에 따라 크기가 조정 된 배열에 의해 뒷받침됩니다.) – MadProgrammer

+0

Java에서 전혀 경험이 없기 때문에 수동으로하고 있습니다. 나의 주요 언어는 파이썬이다 : p. 나는이 경험을 배우기 위해 주로 C 경험을 씁니다. – Broseph

0

변화 문자열 []로 복귀 타입 에 addToArray() 방법 이름을 반환하고 이름을 할당 = addToArray (문자열 [] 이름 INT i, String name); 따라서 당신은 크기가

1

3 점

  1. 배열을 증가 할 때 자바 참조하여 특정 물체를 추적하기 킵을 유지할 수 mainMethod, 그들은 final입니다 length라는 이름의 간단한 속성 있습니다.
  2. 또한 원래 배열의 크기를 변경하지 않고 새 배열을 만듭니다.
  3. 당신이 당신의 메소드 인수의의 참조를 변경할 수 없습니다
[자바에서 현재 요소를 유지하면서 배열의 크기를 조정?]의
+0

글쎄, 그는 정확히 기존 배열의 크기를 변경하려고하지 않았습니다. 그는 당신이 진술 한 것에 대한 기본적인 이해를 이미 보여 주었고, 그래서 그는 새로운 어레이를 만들고 그것을 가리키고 있습니다. –

+0

@Noobacode 제 편집이 내 생각을 더 잘 설명했기를 바랍니다. –

+0

예, 훨씬 좋습니다. –