在我的直方图中,我的X被放置了1个空格

时间:2017-10-01 07:30:29

标签: java histogram

import java.util.*;

public class HistogramGenerator {

    public int getHeightOfHistogram(int[] occurences) {
        // occurences = {1,0,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0]
        int max = occurences[0];
        for (int i = 1; i < occurences.length; i++) {
            if (occurences[i] > max) {
                max = occurences[i];
            }
        }
        return max;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a line: ");
        String sentenceEntered = sc.nextLine();


        System.out.println("Letter Histogram");

        HistogramGenerator histogram = new HistogramGenerator();



        String letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";  //Map of all the characters

        int[] occurences = new int[letters.length()];   //max size of all possible matches

        // loop through sentenceEntered to find occurences of each character
        for (int i = 0; i < sentenceEntered.length(); i++) {
            int charValue = sentenceEntered.charAt(i);
            int index = letters.indexOf(charValue); // index of the character we are searching for

            if (index < 0)
                continue;

            occurences[index]++;
        }
        int heightOfHistogram = histogram.getHeightOfHistogram(occurences);
        String[][] histogramArray = new String[heightOfHistogram][letters.length()]; //[2][26]

        for (int j =0; j < occurences.length; j++) {
            int numXtoInsert = occurences[j];
            while(numXtoInsert > 0){
                histogramArray[heightOfHistogram - numXtoInsert][j] = "X";
                numXtoInsert--;
            }
        }

        // print 26 dashes (length of letters)
        for(int k=0; k < letters.length(); k++){
            System.out.print("-");
        }
        System.out.println();


        // print histogram
        for(int row =0; row < histogramArray.length; row++){
            for(int col=0; col < histogramArray[row].length; col++){
                if (histogramArray[row][col] == null) {
                    System.out.print("");
                    continue;
                }
                System.out.print(histogramArray[row][col] + " ");
            }
            System.out.println();
        }
        System.out.println();



        // print 26 dashes ( length of letters)
        for(int u=0; u < letters.length(); u++){
            System.out.print("-");
        }
        System.out.println();

        // print all characters in letters
        System.out.print(letters);
    }
}

基本上我输入的任何单词都打印出接近它的东西,但不是真的正确,如果我输入苹果,例如它打印出一个接近A的X,P上的X和X关闭到P,和X接近l和E.

逻辑可能存在问题?我不知道,需要一些快速的帮助!

1 个答案:

答案 0 :(得分:0)

问题在于打印逻辑。找到空值时,需要打印空格。如果找不到空值,则不应添加额外空格。请参阅下面的更新工作逻辑:

// print histogram
    for(int row =0; row < histogramArray.length; row++){
        for(int col=0; col < histogramArray[row].length; col++){
            if (histogramArray[row][col] == null) {
                System.out.print(" ");
                continue;
            }
            System.out.print(histogramArray[row][col]);
        }
        System.out.println();
    }
    System.out.println();