2013-03-24 6 views
0

배열 오류가 발생하여 범위를 벗어났습니다. 무엇이 잘못되었는지는 알 수 없습니다.문자열 배열 오류

import java.util.*; 
public class gameVar { 
    public static int size; 
    public static int counter; 
    public static Scanner input = new Scanner(System.in); 
    public static String currentIn; 
    public static String nameArray[] = new String[size]; 
} 

와 (전 6 행에 오류를 얻고있다) 두 번째 클래스는 : 여기 내 코드는

public class mainThread extends gameVar { 
public static void main(String[] args){ 
    System.out.println("Please type the desired amount of players: "); 
    size = input.nextInt(); 
    for(int counter = 0; counter < size; counter++){ 
     System.out.println("Please enter the name of player " + nameArray[counter]) 
     } 
    } 
} 

는 당신의 도움이 많이 감사합니다!

+0

당신은'nameArray [counter]'가 루프의'counter'의 모든 값에 유효한 값입니까? – Aiias

답변

1

다음은 제로 요소 배열을 할당 :

public static void main(String[] args){ 
    System.out.println("Please type the desired amount of players: "); 
    size = input.nextInt(); 
    nameArray = new String[size]; // <<< THIS 
    for(int counter = 0; counter < size; counter++){ 
     System.out.println("Please enter the name of player " + nameArray[counter]) 
     } 
    } 
} 

그런 다음 nameArray의 선언에서 = new String[size]을 제거 할 수 있습니다

public static int size; 
public static String nameArray[] = new String[size]; // <<<< Here, `size` is zero 

당신은 main()으로 배열 초기화를 이동해야합니다.

0

원하는 크기를 얻은 후에 배열 클래스를 다시 초기화하지 않았습니다. 정적 (글로벌) 상태에 지나치게 의존하기 때문에 디자인 전체가 약간의 작업을 필요로합니다.

public static int size; // <-- by default this is zero 
public static String nameArray[] = new String[size]; // <-- Initialized here to size zero! 

mainThread에서 : gameVar에서

size = input.nextInt(); // <-- size is no longer zero 
for(int counter = 0; counter < size; counter++) { 
    System.out.println("Please enter the name of player " + nameArray[counter]); // <-- But your array is still size zero! 
} 

간단한 수정은 새 크기 얻기 후에이 작업을 수행하는 것입니다 : 내가 전에 언급 한 바와 같이

nameArray = new String[size]; 

을하지만, , 당신은 디자인을 재고해야합니다 (정적 변수없이 적절한 클래스를 설계하십시오). 당신이 당신의 문자열 배열을 만들 때, 배열의 크기는 일반적으로 0

이는 새로운 객체를 생성하지 않는 것이 좋습니다입니다 public static int size; 자바 디폴트 크기를 0으로 설정하여 필드 선언에서

+0

좋아, 나는 이것에 대해 새로운 것이지만, 지금은 너에게 감사한다. –

0

필드 선언. 오히려, 당신이 크기가 될 것입니다 알고 후에

public static String nameArray[]; 

다음 새로운 문자열 배열에 nameArray을 설정할 수 있습니다.

size = input.nextInt(); 
nameArray[] = new String[size]; 
for(...... 
+0

감사합니다. 도움이되었습니다. –

0

Array 크기가 자연의 정적, nameArray가 더 초기화가 없습니다 size 제로 static size variable로 선언, 그것은 기본적에게 그것은 바운드 예외 밖으로 배열을 채워야합니다 그래서 nameArray[counter] 0

을 얻을 것입니다.

올바른 크기의 어레이를 초기화해야합니다.

nameArray = new String[size]; 
+0

ok 고마워요! –

0

당신의 MainThread 클래스는 다음과 같이해야한다 : 크기의

public class mainThread extends gameVar { 
public static void main(String[] args){ 
    System.out.println("Please type the desired amount of players: "); 
    size = input.nextInt(); 
    nameArray = new String[size];//reinitialize the nameArray here. 
    for(int counter = 0; counter < size; counter++){ 
     System.out.println("Please enter the name of player " + nameArray[counter]=input.next()) 
     } 
    } 
} 
+0

도움에 감사드립니다. –

0

값을 만들면 기본적으로 제로이다. 그래서 배열은 크기 0으로 생성됩니다. 예 : public static String nameArray[] = new String[0];

따라서 예외가 발생합니다. 변수 크기에 일부 값을 지정하십시오.

+0

감사합니다. 이것은 나를 도왔다. –

+0

도움이 되었다면 답을 평가할 수 있습니다. :-) –

0

는 그것의 크기가 0

공용 static 문자열 nameArray [] = 새로운 String [크기]로 설정되는 배열을 초기화 할 때;

크기 값을 변경하는 경우 size = input.nextInt();

정수 변수의 값을 변경하지만 배열의 크기는 변경되지 않으므로 오류가 발생합니다. array (nameArray.length) 후자의 크기를 출력하여 검사 할 수있다.

'크기'값을 가져온 후에 초기화해야합니다.