2012-04-07 3 views
2

참고 : 표시가 아닌 연습 문제입니다.정수 배열 및 중복 인쇄 빈도

이 첫 해 자바 과정에서 주어진 연습 문제 :

설계 및 범위 0 ~ 50이 포함됩니다 사용자가, 정수의 임의의 수를 읽고 응용 프로그램을 구현, 각 항목의 입력 횟수를 계산합니다. 모든 입력이 처리 된 후, 한 번 이상 입력 된 모든 값 (발생 횟수 포함)을 인쇄하십시오. 또한 사용자가 입력 한 모든 숫자의 평균을 계산하는 값을 반환하지 않는 메서드를 작성합니다.

import java.util.Scanner; 
public class Main 
{  
public static Scanner scan = new Scanner(System.in); 

    public static int[] userIntegers()  // this method will build the array of integers, stopping when an out-of-range input is given 
    { 
      System.out.println("Enter the number of integers to be recorded: "); 
      int numInts = scan.nextInt(); 

      int[] userArray = new int[numInts]; 
      int i = 0; 
      while(i < numInts) 
      { 
        System.out.println("Enter an integer between 1-50 inclusive: "); 
        int userInteger = scan.nextInt(); 
        if(isValidInteger(userInteger)) 
        { 
          userArray[i] = userInteger; 
          i++; 
        } 
        else if(isValidInteger(userInteger) == false) 
        { 
          System.out.println("Try again."); 
        }      
      } 
      return userArray; 
    } 

    public static void occurrenceOutput(int[] input)   // this method will print the occurrence data for a given array 
    { 
     int[] occurrenceArray = new int[51]; 

      int j = 0; 
      while(j < 51) // iterates through all integers from 0 to 50, while the integer in the array is equal to integer j, the corresponding occurance array element increments. 
      { 
        for(int eachInteger : input) 
        { 
          occurrenceArray[j] = (eachInteger == j)? occurrenceArray[j]+=1: occurrenceArray[j]; 
        } 
        j++; 
      }    

      int k = 0; 
      for(int eachOccurrence : occurrenceArray) // as long as there is more than one occurrence, the information will be printed. 
      { 
        if(eachOccurrence > 1) 
        { 
          System.out.println("The integer " + k + " occurrs " + eachOccurrence + " times."); 
        } 
        k++; 
      } 
    } 

    public static boolean isValidInteger(int userInput)  // checks if a user input is between 0-50 inclusive   
    {   
     boolean validInt = (51 >= userInput && userInput >= 0)? true: false; 
      return validInt; 
    } 

    public static void main(String[] args) 
    { 
     occurrenceOutput(userIntegers()); 
    } 
} 

사람이 더 우아한 방향으로 날 지점 수 :

이 내가 가진 것입니다 (나는이 정리 될 때까지 나는 "평균 발생"부분을 생략했다)?

편집 : 도움을 주셔서 감사합니다! 당신은 실제로 histogram를 찾고 있습니다

import java.util.Scanner; 
public class simpleHist 
{ 
    public static void main(String[] args) 
{ 
      getUserInputAndPrint(); 
      getIntFreqAndPrint(intArray, numberOfInts); 
    } 

    private static int numberOfInts; 
    private static int[] intArray; 
    private static int[] intFreqArray = new int[51]; 

    public static void getUserInputAndPrint() 
    { 
      // The user is prompted to choose the number of integers to enter: 
      Scanner input = new Scanner(System.in); 
      System.out.println("Enter the number of Integers: "); 
      numberOfInts = input.nextInt(); 

      // The array is filled withchInteger = integer; integers ranging from 0-50: 
      intArray = new int[numberOfInts]; 
      int integer = 0; 
      int i = 0; 
      while(i < intArray.length) 
      { 
        System.out.println("Enter integer value(s): "); 
        integer = input.nextInt(); 
        if(integer > 50 || integer < 0) 
        { 
          System.out.println("Invalid input. Integer(s) must be between 0-50 (inclusive)."); 
        } 
        else 
        { 
          intArray[i] = integer; 
          i++; 
        } 
      } 

      // Here the number of integers, as well as all the integers entered are printed: 
      System.out.println("Integers: " + numberOfInts);  
      int j = 0; 
      for(int eachInteger : intArray) 
      { 
        System.out.println("Index[" + j + "] : " + eachInteger); 
        j++; 
      } 
    } 

public static void getIntFreqAndPrint(int[] intArray, int numberOfInts) 
{ 
    // Frequency of each integer is assigned to its corresponding index of intFreqArray: 
    for(int eachInt : intArray) 
    { 
     intFreqArray[eachInt]++; 
    } 

    // Average frequency is calculated: 
    int totalOccurrences = 0; 
    for(int eachFreq : intFreqArray) 
    { 
     totalOccurrences += eachFreq; 
    } 
    double averageFrequency = totalOccurrences/numberOfInts; 

    // Integers occurring more than once are printed: 
    for(int k = 0; k < intFreqArray.length; k++) 
    { 
     if(intFreqArray[k] > 1) 
     { 
      System.out.println("Integer " + k + " occurs " + intFreqArray[k] + " times."); 
     } 
      } 

      // Average occurrence of integers entered is printed: 
      System.out.println("The average occurrence for integers entered is " + averageFrequency); 
      } 
    } 

답변

2

: 나는 지금 나는 곳이다. Map<Integer,Integer>을 사용하여 구현하거나 요소 범위가 0-50로 제한되어 있으므로 [0-50] 51 요소가있는 배열을 사용할 수 있으며 i을 읽으면 histogram[i]이 증가합니다.

보너스 :

for(int eachInteger : input) { 
     occurrenceArray[eachInteger]++; 
} 

이 당신의 while 루프를 대체합니다 :이 아이디어를 이해하고 발행 수를 계산하려면 count-sort

+0

와우 우리는 지금 내 이산 수업에서 완전히 히스토그램이며, 클릭하지도 않았습니다. 카운트 정렬에 대한 링크는 매우 도움이되었습니다. 감사합니다! –

+0

@obfuscater : 당신이이 연결을하고있어 기쁘게 생각합니다. 수학과 이론 수업은 프로그래머로서 당신에게 큰 자산이 될 것입니다. – amit

1

의 기본을 이해하면, 당신은 같은 것을 할 수 있습니다.

+0

homewotk라고 표시된 질문에 대한 대답을 게시하지 마세요. – amit

+0

Amit : 죄송합니다. 숙제 태그를 완전히 놓쳤습니다. –

+0

나는 그런 식으로 배열 요소를 증가 시키려고 생각하지 않았다. (단지 일주일 동안 배열에 있었다.) 내가 가지고있는 것보다 눈에 확실히 쉽게! –