简体   繁体   中英

Single-dimensional array issue with displaying results

package u7a1_numofoccurrinsevenints;
/**
 * 
 * @author SNC78
 */
import java.util.Scanner;

public class U7A1_NumOfOccurrInSevenInts {

public static void main(String[] args) {
    //constant for number of entries
    final int MAX_INPUT_LENGTH = 7;
    // array to hold input
    int[] inputArray = new int[MAX_INPUT_LENGTH];

    Scanner input = new Scanner(System.in);

    System.out.print("Enter seven numbers (separated by spaces):");

    int max = Integer.MIN_VALUE;
    // loop to read input, store in array and find highest value
    for(int i = 0; i < MAX_INPUT_LENGTH; i++) {
        // Read a single int - Scanner has no nextInt()
        inputArray[i] = (input.next().charAt(0));
        if(inputArray[i] > max) {
            max = inputArray[i];
        }
    }

    // Use highest value + 1 to determine size of count array.
    // Use +1 because highest index in array is always 1 less than size
    int[] countArray= new int[max + 1];

    // Loop through input and count by mapping value in input array to
    // index number in count array. Increment value in count array at that
    // location.
    for(int i = 0; i < MAX_INPUT_LENGTH; i++) {
        countArray[ (int) inputArray[i]]++;
    }

    // Loop countArray to produce output of counts.
    // Loop needs to run as long as < max + 1
    // Could also use i <= max
    for(int i = 0; i < max + 1; i++) {
        // Only print out counts for numbers that occur in input.
        if(countArray[i] > 0) {
            System.out.println( "Number " + i + " occurs "
            + countArray[i] + " times.");
        }
    }


}

}

So this is what I'm working with ^^. My output is as follows: run:

Enter seven numbers (separated by spaces):22 23 22 78 78 59 1
Number 49 occurs 1 times.
Number 50 occurs 3 times.
Number 53 occurs 1 times.
Number 55 occurs 2 times.

I've built this current program off of a similar one but can't locate why it's returning odd numbers back instead of the ones entered. Like how it's returning 49, 50, 53... instead of any of the numbers I've entered

The problem is that you are using:

input.next().charAt(0);

to scan in the next int. This is taking a char, converting it to it's int value (Or ascii value - not what you want) and then adding it to the int Array . So when you enter 20, it takes the first char , 2 , and converts it to it's ascii value, 50 (You entered three values in the 20 's, so 50 was recorded three times).

You want to use the nextInt() method to read in int 's:

inputArray[i] = input.nextInt();

There appears to be an issue when you read in the integers from the input. Try using input.nextInt() rather than (input.next().charAt(0));. Scanner does have a nextInt.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM