2014-11-30 2 views
-2

이 배열 코드에 문제가 있습니다. 사용자가 입력 한 숫자를 표시하는 숫자가 있어야합니다. 예를 들어, 사용자가 3 개의 4를 입력하면 "4 3"이라고 표시됩니다. 이미 대부분의 코드가 완료되었지만 입력 된 첫 번째 숫자 만 리턴합니다.배열에 문제가 있습니다.

import java.util.Scanner; 

public class NumberCounts 
{ 
    public static void main(String args[]) 
    { 
    int[] answer = new int [100]; 
    inputArray(answer); 
    } 

    public static void inputArray(int[] Numbercounts) 
    { 
    System.out.println("This Program is written by Benjamin Barcomb\n"); 
    Scanner kb = new Scanner(System.in); 

    System.out.print("How many numbers will you enter? : "); 
    kb.nextInt(); 
    //int[] answer = new int[100]; 

    int arryNum[] = new int[] {}; 

    System.out.println("\nEnter numbers in [0, 100] range separated by a space:"); 
    int input = kb.nextInt(); 

    System.out.println("Number Count"); 

    int[] counter = new int[] {input}; 
    for (int i = 0; i < arryNum.length; i++) { 
     System.out.println("  " + (i + 1) + "  " + counter[i]); 
    } 

    for (int i = 0; i < counter.length; i++) { 
     System.out.println("  " + (i + 1) + "  " + counter[i]); 
    } 
    } 
} 
+1

나는이 질문이 너무 애매하다고 느낍니다. 더 많은 관심을 가지고 질문해야합니다. 정확하게, 당신이 기대하는대로 작동하지 않습니다. 혼동을 일으키는 코드 동작의 어떤 부분을 찾으십니까? 현재 작성된 방식대로 작동 할 것으로 기대하십니까? 이것은 숙제 도움보다 더 좋아 보인다. 나는 중재자가 아니지만 StackOverflow가 적절한 장소가 아닌 것으로 의심한다 –

답변

2

STA하기 rt ...

1) 배열 answer 길이 100을 만들고 메서드에 전달한 다음 아무 곳에 나 사용하지 마십시오.

2) 입력 할 숫자의 수를 알려주려면 kb.nextInt()으로 입력 한 다음 아무 것도 입력하지 마십시오. 그 int를 변수에 할당하지 않습니다.

3) 배열 arryNum을 만들고 비워 두십시오. 당신은 절대로 아무것도 넣지 않습니다.

4) 공백으로 구분 된 숫자를 입력하도록 사용자에게 요청합니다. 그런 다음 첫 번째 int 만 입력하면됩니다.

내가 배우는 것처럼 보이기 때문에 코딩을 맡길 것입니다. 바라건대 코드의 특정 부분이 무엇을하는지 볼 수 있다면 거기에서 계속 이동할 수 있기를 바랍니다. 나의 한가지 팁은보다 기술적 인 변수 이름을 사용하는 것이다. 코드를 볼 때 진행되는 작업을 더 쉽게 읽을 수 있습니다.

일부 솔루션

1) 요구 사항 당신이 inputArray() 방법으로 배열을 통과해야 말을하지 않는 한 당신이 방법에서 다른 모든 일을하고 있기 때문에, 난 그냥 모두 함께 제거한다. 나는 매개 변수없이 inputArray()으로 int[] answer = new int [100]; 호출하는 방법을 제거하고 당신은 그들이 "어떻게 당신이 기본적를 요구하는 입력하려고 얼마나 많은 숫자를 사용자에게 문의하면 메소드의 서명 만

public static void inputArray() { ... } 

2)를 변경할 것 내 배열이 있어야합니까? " 이 int를 얻을 때 새로운 배열을 만드는 데 사용해야합니다. 내가 usersNumbersarrayNum의 이름을 변경 한

System.out.print("How many numbers will you enter? "); 
int usersNumbers = new int[kb.nextInt()]; 

공지 사항처럼 뭔가. 더 이해하기 쉽고 코드를 더 쉽게 읽을 수 있습니다.

3) 이제 모든 숫자를 가져 와서 배열에 넣기를 원합니다. 여러 개의 숫자를 가져와야하기 때문에 루프가 필요합니다. 다시 말하지만, 요구 사항이 당신이해야한다고 말하지 않는다면, 나는 이것을 약간 다르게 할 것입니다. 공백으로 구분 된 한 줄에 모든 숫자를 입력하는 대신 개별적으로 숫자를 묻습니다. 배열의 길이 (얼마나 많은 숫자를 입력 할 것인가)를 알기 때문에, 우리는 얼마나 많은 시간을 그들에게 알려주는지 압니다.

System.out.println("\nEnter numbers in [0, 100] range.\n"); 
for (int i = 0; i < usersNums.length; i++) { 
    System.out.println("Enter Your Number:"); 
    usersNums[i] = kb.nextInt(); 
} 

4) 이제 입력 된 각 int의 발생 횟수를 계산합니다. 사용자는 임의의 순서로 숫자를 입력 할 수 있기 때문에 더 힘들어집니다. 다시 말하지만, 귀하의 요구 사항이 정확히 무엇인지는 모르겠지만, 여기에 내가 한 일이 있습니다. 먼저 고유 번호 목록을 얻고 싶습니다. 예를 들어, 배열이 {2, 4, 2, 5, 2, 4}이면 ​​{2, 4, 5}로 목록을 가져오고 싶습니다. 일단 내가 가지고 있으면 각 번호를보고 배열을 통해 여러 번 볼 수 있습니다. 고유 번호 목록을 얻는 쉬운 방법은 Set에 넣는 것입니다. 중복을 허용하지 않는 데이터 구조입니다. TreeSet은 쉽게 읽을 수 있도록 숫자를 순서대로 나열한 세트입니다.

Set<Integer> uniqueNumbers = new TreeSet<Integer>(); 
for (int i : usersNums) { uniqueNumbers.add(i); } 

이제 고유 번호 목록이 생겼으니 이제 계산을 시작할 수 있습니다. 나는 0부터 시작한다. 그 다음 세트의 모든 숫자에 대해 배열의 모든 숫자를보고 동일한지 확인한다. 그럴 경우 카운트는 1 씩 증가합니다. 배열 끝에 도달하면 해당 숫자에 대한 결과를 인쇄 한 다음 카운트를 0으로 재설정합니다.

int count = 0; 
for (Integer i : uniqueNumbers) {     //For every number in the Set 
    for (int j = 0; j < usersNums.length; j++) { //Look at every number in the array 
     if (i == usersNums[j]) { count++; }  //If the same, count++ 
    } 
    System.out.print(i + " - " + count + "\n"); //Print results 
    count = 0;         //Reset Count 
} 
+0

나는 당신이 말하는 것을보고 있지만, 당신이 말했듯이 나는 확실히 초보 프로그래머이다. 어디서나 그 대답 배열을 사용하는 방법을 잘 모르겠습니다. arryNum 배열로 말한 것을 보았지만 나중에 프로그램에서 루프에서 사용하고있는 것처럼 어디에서 사용해야하는지 확신 할 수 없습니다. 나는 배열이 완전히 정직하다는 것을 이해하지 못한다. 그리고 모든 겸손 함에서 나는 프로그래밍에 관해서 똑똑하지 않다는 것을 이해한다. 더 이상 도움이된다면 크게 감사하겠습니다. –

+0

Afk atm하지만 곧 더 많은 정보를 추가하겠습니다. – csmckelvey

+0

@BenjaminBarcomb 추가 정보가 추가되었습니다. 수를 인쇄하려면 사용자가 임의의 순서 (예 : 5 2 6 6 3 5 7)로 번호를 입력하는지 또는 순서대로 (2 3 5 5 6 6 7) 알 수 있어야합니다. – csmckelvey

1

당신이 한 번만 스캐너에 nextInt()이라고 때문에 첫 번째 값을 받고있어 보인다. 사용자 입력을 수집하기 위해서는 while 루프가 이상적입니다. 또한 배열에 답을 저장하려고하는 것으로 생각합니다. 입력이 얼마나 커질 지 모르기 때문에 실제로는 이상적이지 않습니다. 당신은 실제로 목록을 사용해야합니다.

+1

아, 그 점은 아닌가요? nextInt()는 사용자가 값을 입력하기를 원했을 때 한 번만 호출되었으므로 op는 입력에서 하나의 값만 저장했습니다. – rachelyen

+0

OP에는 몇 가지 문제가 있습니다. 이것은 그들 중 하나를 해결하는 데 도움이됩니다. –

+0

몇 가지 문제가 있다는 것을 이해합니다. 이것이 내가 도움을 요청하는 이유입니다. 저를 믿으려고 몇 시간을 보냈습니다. 나는 배열을 처음 사용하므로 도움이 필요하다. –

1

줄을 따라 뭔가를 설명해주십시오. 문제를 해결하는 방법을 이해하시기 바랍니다.

먼저

, 난 당신이 사용자가 하나 개 이상의 숫자를 입력한다고 가정하지만 당신은 의미 nextInt 사용

java.util.Scanner.nextInt() 방법 스캔 의 int로 입력 의 다음 토큰 nextInt() 형식의 호출은 nextInt (radix) 호출과 정확히 같은 방식으로 동작합니다. radix는이 스캐너의 기본 기수입니다.

제안 : 사용자가 당신의 while 루프의 종료로, 예를 들어 -999999을 입력 할 때 많은 수와 상당히을 읽는 동안 루프를 사용하려고합니다.

두 번째Array은 배열의 크기를 모르기 때문에 사용할 데이터 구조가 올바르지 않습니다.

1 :

이 문제를 해결하기 위해 2 가지 방법이 있습니다. 먼저 사용자가 원하는 숫자가 아닌 얼마나 많은 숫자를 입력하고 싶은지와 같은 배열의 크기를 사용자에게 묻습니다.

. 축소 및 ArrayList

셋째되는 그 자체로 확장 다른 데이터 구조를 사용, 당신은 당신이 거

1 1 2 3 3 4 4 5 or unsorted like `1 2 1 4 3 4 5` 

또는 당신의 입력이 같은 번호가 포함처럼 입력에 다른 번호가 있는지 여부를 말하지 않았다 같은

2 2 2 2 2 2 2 

More info for third point is here

관련 문제