2011-02-23 17 views
0

2 차원 배열을 사용하고 2 차원 배열을 반환하는 Java 함수를 작성 중입니다. 이 함수는 입력 함수의 일부 요소를 필터링합니다. I 배열 다음Java에서 2 차원 배열의 일부 요소 제거

{{"one", "0.0"}, {"two", "2.4"}, {"three", "0.0"}, {"four", "2.3"}} 

있는 경우 제가

{{"two","2.4"},{"four","2.3"}} 

I 가지고 얻을 것이다 :이 경우, 문자열의 그 배열하고, 예를 들면 0으로 두 번째 요소를 갖는 요소를 필터링 이 있지만

public String[][] getArrayNoZero(String[][]s){ 
    String [] result; 
    for(int i=0; i<s.length; i++){ 
    if(float(s[i][1])>0){ 
     String []tempArray= {s[i][0],s[i][1]}; 
     result.append(tempArray); 
    } 
    } 
    return result; 
} 

감사

작동하지 않습니다

답변

2

캐스팅을 시도한 방식이 잘못되었습니다. Float.parseFloat 메서드를 사용하여 문자열을 float로 변환하거나 같음 문자열을 비교하는 방법을 사용하십시오.

public String[][] getArrayNoZero(String[][]s) 
    { 
    java.util.List<String[]> result=new java.util.ArrayList<String[]>(); 
    for(int i=0; i<s.length; i++) 
    { 
    if(!s[i][1].equals("0.0")) 
     { 
     String []tempArray= {s[i][0],s[i][1]}; 
     result.add(tempArray); 
     } 
    } 
    return result.toArray(new String[0][0]); 
} 
0

가장 간단한 방법은 t이다 원하는 반환 유형 (여기서는 new ArrayList<String[]>)의 새 ArrayList를 만들고 원하는 요소를 추가 한 다음 끝에 toArray (return myList.toArray(new String[][0]);)를 사용합니다.

0

우선 상수 두 항목에 대한 String []은 데이터를 저장하는 끔찍한 방법입니다. 당신은 객체를 사용하는 것이 더 편할 것입니다.

public class Pair 
{ 
    public String firstElement; 
    public String secondElement; 
} 

그리고 나서 Pair 객체의 단일 배열을 가질 수 있습니다.

귀하의 현재 구현은 단순히 작동하지 않습니다. 배열은 동적으로 크기를 변경할 수 없습니다 (하나의 배열을 다른 배열에 추가하려고합니다). append() 메소드는 어딘가에 할당되어야하는 새로운 배열을 반환합니다 (이것이 비효율적 인 이유를 알 수 있습니다). 그래서 당신은 필요한 것 :

result = result.append(tempArray); 

그 결과가 원래 코드에서 지정하지 않은 시작하는 2 차원 배열이어야 언급 할 필요가 없을 것입니다.

String[][] result; 

그리고 당신은) (추가를 사용하려고하면 이제는 NullPointerException을 피하기 위해 뭔가 결과를 초기화해야 할 것입니다.

즉, 2D 배열은 어쨌든 2 개의 열만 있기 때문에이 데이터를 저장하는 끔찍한 방법입니다. 구조체와 Pair 객체의 단일 배열을 사용하여 작업하는 것이 훨씬 쉽고 많은 두통을 줄일 수 있습니다.

관련 문제