2016-10-24 2 views
1

배열에서 양수를 반환하려고합니다. 나는 배열에 익숙하지 않고 알아 내는데 어려움을 겪고있다.배열을 사용하여 양수를 얻으십시오.

public class PossitiveArray 
{ 
    public static void main(String[] args) { 
    int[] numbers = {2,-1,5,-4,3}; 
    System.out.print(numbers); 

    } 
    public static int[] getPositiveNumbers(int[] numbers) 
    { 

     for (int n : numbers) 
     { 
      if(n>0) 
      { 
       int [] nums = numbers; 
      } 
     } 

     return nums; 

    } 
} 

는 분석 - 이 내가 생각 해낸 것입니다. 지금 당장 그것은 num과 num을위한 지역 변수를 만들 필요가 있다고 말하면서 오류가 발생하지만, 그렇게하면 "[@ @ 677327b6"을 반환합니다. 숫자를 반환하도록 만들려고했지만 if 문에 무엇을 넣을 지 잘 모르겠습니다.

필수 - 목표는 단지 ​​양수가 반환되도록하는 것입니다. 어떤 도움이라도 나는 일반적으로 어레이와 프로그래밍에 대해 잘 알고 있습니다.

자바 (8)의 흐름이 훨씬 쉽게을 만들 것
+1

라인'INT [] nums의 = 번호,'당신이 원하는 어떤 주어진 이해가되지 않습니다. 단순히 전체 배열을 복사합니다. 보다 나은 접근법은 로컬 ArrayList를 생성하고 (for 루프에) 원하는 숫자를 추가하는 것입니다. 그리고 그것을 배열로 반환 할 필요가 있다면 그것을 반환하기 전에'toArray' 메서드를 호출해야합니다. – UnholySheep

답변

0

사용 코드 -

아래
public class test 
{ 
    public static void main(String[] args) { 
    int[] numbers = {2,-1,5,-4,3}; 
    for(int n : getPositiveNumbers(numbers)){ 
     System.out.print(n);  
    } 


    } 
    public static int[] getPositiveNumbers(int[] numbers) 
{ 
    int count = 0; 
    for (int n : numbers) 
    { 
     if(n>0) 
     { 
      count++; 
     } 
    } 
    int [] nums = new int[count]; 
    int i =0; 
    for (int n : numbers) 
    { 
     if(n>0) 
     { 
      nums[i] = n; 
      i++; 
     } 
    } 

    return nums; 

} 
} 
+0

배열의 모든 후행 0은 어떻게됩니까? – UnholySheep

+0

실제로 이것은 선언 된 배열의 크기 때문입니다.배열 크기를 배열의 양수와 같다고 선언하면 후행 0이 없습니다. –

+0

예,이 방법이 효과적이지만 음수 대신 0을 제거하는 방법은 무엇입니까? –

2

: 결과를 인쇄에 관한

public static int[] getPositiveNumbers(int[] numbers) { 
    return Arrays.stream(numbers).filter(i -> i > 0).toArray(); 
} 

- 당신은 그것을 무시하지 않는 int[]로, 기본 toString()을보고있다. 대신 Arrays.toString을 사용하여 결과를 인쇄 할 수 있습니다.

0

은 귀하의 질문에 대답하려면 여기를 고려해야 할 몇 가지가있다.

  1. 가변 범위 num은 루프에 국한됩니다. 즉, for 루프가 반복 할 때마다 nums이 삭제되고 루프가 끝나면 사라집니다. 선언문을 for-loop 앞에 놓으면이 문제를 해결할 수 있습니다.

  2. 선언문 int[] nums은 nums가 int 배열임을 선언하지만 배열에 아무 것도 넣기 위해 공간을 할당하지 않습니다. 예를 들어 int[] nums = new int[5]을 사용하여 공간을 할당해야합니다.이 공간은 5 개의 슬롯 배열을 생성합니다. 귀하의 경우, 모든 양수를 보유 할 배열을 원할 것입니다. 최대 배열은 입력 배열 전체 일 것입니다. 이 작업을 수행하려면 int [] nums = new int[numbers.length]을 사용하십시오 (단, 다음 항목 참조).

  3. 양의 정수 만 포함 된 새 배열 num을 어떻게 채우겠습니까? {2,-1,5,-4,3}{2, 5, 3} (으)로 반환하려는 경우 또는 {2,0,5,0,3}을 반환하겠습니까? 두 경우 모두 for 루프가 num을 처리하는 방법에 영향을 미칩니다. {2, 5, 3}의 출력에 대해 배열의 크기는 먼저 양수 항목의 수를 먼저 계산하여 알아 내야합니다.

참고 :이 문제는 크기가 동적으로 처리되는 링크 된 목록을 사용하면 더 쉽게 해결할 수 있습니다.

여기에 네거티브를 0으로 대체하는 솔루션이 있습니다.

class PossitiveArray { 
    public static void main(String[] args) 
    { 
     int[] numbers = {2,-1,5,-4,3}; 
     System.out.print(Arrays.toString(getPositiveNumbers(numbers))); 
    } 

    public static int[] getPositiveNumbers(int[] numbers) 
    { 
     int [] nums = new int[numbers.length]; 
     for(int i = 0; i < numbers.length; i++) 
     { 
     if(numbers[i] > 0) 
     { 
      nums[i] = numbers[i]; 
     } 
     else 
     { 
      nums[i] = 0; 
     } 

     } 
     return nums; 
    } 
} 
+0

'공용 클래스 PossitiveArray { public static void main (String [] args) { int [] numbers = {2, -1,5, -4,3}; System.out.print (Arrays.toString (nums)); public static int [] getPositiveNumbers (int [] numbers) { \t int [] nums = 새로운 int [numbers.length]; for (int n : numbers) { if (n> 0) { nums = numbers; } } return nums; } } ' –

+0

죄송합니다. 코드를 게시하려고했습니다. 메신저에서 함수를 호출하는 방법을 모르겠다. –

+0

' 클래스 PossibleArray { public static void main (String [] args) { int [] numbers = {2, -1,5, -4,3}; System.out.print (Arrays.toString (getPositiveNumbers (numbers))); } public static int [] getPositiveNumbers (int [] numbers) { int [] nums = 새로운 int [numbers.length];(int i = 0; i 0) { nums [i] = numbers [i]; } else { nums [i] = 0; } } return nums; } }' – ZeroPad

관련 문제