지금 저 슈도코드 보고 만드는거거든.
저게 그냥 배열 만든 다음에 그 배열안의 값이 1씩 늘어나는 거고 그걸 다 합치라는거잖아.
예를들면
A[0] = 1
A[1] = 2
A[2] = 3 이면
sum = A[0] + A[1] + A[2] 해서 6 이렇게 되도록.
그래서
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n;
int sum=0;
System.out.println("Input elements N");
Scanner keyboard = new Scanner(System.in);
n = keyboard.nextInt();
int [] value = new int[n]; // 이렇게 n개의 배열을 임의로 생성할 수 있도록 해놓고
long begin = System.nanoTime();
for(int i=0;i<=n;i++){
value[i] = i ;
sum = sum + value[i] ;
} // 설정한 배열크기 n보다 작은 수 직전까지 배열안의 크기를 1씩 늘어나게 한다음에 더하기를 하게했거든?
long end = System.nanoTime();
System.out.println("연산시간:"+(end-begin)+"ns 계산 결과:"+sum);
}
}
// 근데 돌려보면 오류남
A 라는 dimension 변수를 잡아서 1이상의 정수를 집어 넣고 더한 값을 출력하는거 아니냐? 1씩 더하라는 말은 어딧는겨?
for (int i = 0; i < n; i++) { value[i] = i + 1;
네 코드 잘 보면 배열 보다 넘어서 지정해서 예외일어난다
1부터 n까지 더하는거면 어레이를 잡을 필요도 없지 않겠어? 그리고 오류를 올려주면 더 쉽게 답을 줄 수 있지 싶은데...
위에 애 말대로 범위초과고, 문제를 잘 보면 첫 항은 더할 필요 없이 sum 자체에 대입하라고 되어 있다.
sum = 0; 에서 0 집어넣는것도 사족이란거지.
위 문제는 1보다 크거나 같은 n개의 숫자가 담긴 배열을 입력으로 받아서 배열의 원소들을 다 더하라는 뜻이다. 슈도코드는 그러한 배열이 주어졌을 경우를 전제로 하고 있지. 그러므로 위 슈도코드를 구현으로 옮길때는 1. 임의의 숫자가 담긴 배열 생성, 2.배열을 입력받아 원소의 합을 반환 하도록 구현을 해야 함.
이 두가지를 명확히 나눠야 하는데 구현에서는 배열에 숫자값을 넣으면서 동시에 합을 구하고 있으니 뭔가 이상해진 것.. 요구사항을 엉뚱하게 해석하면 결과도 괴상해지지... 위 슈도코드는 배열에 1보다 큰 값이 들어간다고만 했지, 오름차순으로 들어간다는 말은 없다.
문서를 꼼꼼히 보는 것도 실력이다. 그래야 꼼꼼한 문서를 작성할 수 있고 다른 사람 시간을 뺏지 않는다. 문서를 자기 식대로 해석하고 꼴리는대로 막 구현하면 언젠가는 똥을 뒤집어 쓰게 된다. 그래서 자기중심적인 사람이 프로그래머를 하면 곤란함.
나도 처음에 자바 배열을 C배열처럼 쓰다보니깐 저런문제에 빠졌었는데 ㅋㅋㅋ 자바에서 크기가 안정해진 배열스려면 String... a 이거쓰거나 아니면 그냥 List<Integer> a 이걸로쓰면됨