2014-11-11 4 views
2

int 배열을 가져 와서 숫자의 제곱근이 배열에 있는지 확인합니다. 예이면 yes를 인쇄합니다. else 아니오를 인쇄합니다. 내 코드가 항상 반환되는 이유를 알 수 없습니다. 예를 들어정수 배열 요소의 제곱근 계산시 Arrays.asList 문제

내 입력 인 경우 : 1 4 0 2 16 3

내 출력 될 것입니다 : 예 아니오 예 예 예 아니오

이 내 코드입니다 :

import java.util.Arrays; 

public class Assignment02Q04 { 
    public static void main(String[] args) { 
     int[] intlist = new int[args.length]; 
     for (int i=0; i < args.length; i++) { 
      intlist[i] = Integer.parseInt(args[i]); 
     } 

     for (int number : intlist) { 
      int sqrt = (int)(Math.sqrt(number)); 
      System.out.println(sqrt); 
      if (Arrays.asList(intlist).contains(sqrt)) { 
       System.out.println("yes"); 
      } else { 
       System.out.println("no"); 
      } 
     } 
    }    
} 
+0

코드에서만 말할 수는 없습니다. 어쩌면 ... int 대신 Integer를 사용해보십시오. 리스트는 프리미티브가 아닌 오브젝트에서 더 잘 작동합니다. – Dalton

+0

@CoolGuy이 질문에 대한 답은 나오지 않습니다. 왜냐하면 그는 원래 번호의 배열 전체를 확인하기를 원하기 때문입니다. –

+0

정수 [] int 대신 int [] intlist – Leo

답변

3

연속적으로 변환하는 대신 Arrays.asList()를 사용하여 컬렉션을 처음부터 사용하는 것을 고려하십시오. 또한 제곱근에 floor를 사용하고 원래의 숫자와 2의 거듭 제곱을 비교하여 숫자의 자연스런 제곱근이 맞는지 확인하십시오. 다음은 예상 된 결과를 반환하는 코드입니다. 예 예 예 아니오 예 아니오 :

public static void main(String[] args) { 
    List<Integer> intlist = new ArrayList<Integer>(); 
    for (int i = 0; i < args.length; i++) { 
     intlist.add(Integer.parseInt(args[i])); 
    } 

    for (int number : intlist) { 
     int sqrt = (int) (Math.floor(Math.sqrt(number))); 
     if (sqrt * sqrt == number && intlist.contains(sqrt)) { 
      System.out.print("yes "); 
     } else { 
      System.out.print("no "); 
     } 

    } 
} 
10

Arrays.asList(intlist) 반환 배열의리스트 int[].

// the return is a list of arrays; arrays are objects in Java 
List<int[]> asList = Arrays.asList(intlist); 

당신은 대신 Integer 객체의 배열을 사용하여이 문제를 해결할 수 있습니다 다음 int[] 배열 자체는 여기에 방법에 전달 하나의 객체로 처리됩니다.

Integer[] intlist = new Integer[args.length]; 
for (int i=0; i < args.length; i++) { 
    intlist[i] = Integer.parseInt(args[i]); 
} 
+1

하지만 모두 예를 반환합니다. –

+1

{1,4,0,2,16,3}의 제곱근 값은 {1, 2, 0, 1, 4, 1}이고 모두 목록에 있으므로 . – manouti

+0

2의 제곱근은 1.41이지만 double에서 int로 변환시 십진수는 손실됩니다. 그러므로 그 대답은 거짓입니다. –