简体   繁体   中英

Why is null appearing in my output? - Java

I am writing this program and all of a sudden null appears in the output:

 1-10 |null**********

11-20 |null**********

21-30 |null

31-40 |null

41-50 |null

it should be like this:

 1-10 |**********

11-20 |**********

21-30 |

31-40 |

41-50 |

This is my code:

import java.util.Arrays;

public class Ex4Method {

    public void Average(int[] a) {

        int total = 0;

        for (int i = 0; i < a.length; i++) {
            total = total + a[i];
        }

        int average = total / a.length;

        System.out.println(" ");
        System.out.println("Average: " + average);
    }

    public void MaxAndRange(int[] b) {

        int min = b[0];
        int max = b[0];

        for (int i = 0; i <= 19; i++) {
            //System.out.println(i);
            if (b[i] < min) {
                min = b[i];
            }
            if (b[i] > max) {
                max = b[i];
            }
        }
        int range = max - min;
        System.out.println("Maximum Number: " + max);
        System.out.println("Range: " + range);

    }

    public void Median(int[] c) {
        Arrays.sort(c);
        double median = 0;
        System.out.println("Median: " + median);
    }

    public void findMedian(int a[]) {
        // First we sort the array 
        Arrays.sort(a);
        double median;
        if (a.length % 2 == 0) {
            median = ((double) a[a.length / 2] + (double) a[a.length / 2 - 1]) / 2;
        } else {
            median = (double) a[a.length / 2];
        }

        System.out.println("Median: " + median);
    }

    public void Mode(int[] d) {

        int maxValue = 0, maxCount = 0;

        for (int i = 0; i < d.length; i++) {
            int count = 0;
            for (int j = 0; j < d.length; j++) {
                if (d[j] == d[i]) {
                    count++;
                }
            }
            if (count > maxCount) {
                maxCount = count;
                maxValue = d[i];
            }
        }
        System.out.println("Mode: " + maxValue);


    }

    public void Histogram(int[] f) {

        String[] asterisk = new String[6];

        System.out.println("Histogram: ");
        System.out.println(" ");
        for (int i = 0; i <= f.length - 1; i++) {

            if (f[i] >= 1 && f[i] <= 10) {
                asterisk[1] += "*";
            }
            if (f[i] >= 11 && f[i] <= 20) {
                asterisk[2] += "*";
            }
            if (f[i] >= 21 && f[i] <= 30) {
                asterisk[3] += "*";
            }
            if (f[i] >= 31 && f[i] <= 40) {
                asterisk[4] += "*";
            }
            if (f[i] >= 41 && f[i] <= 50) {
                asterisk[5] += "*";
            }
        }

        System.out.println(" 1-10 |" + asterisk[1]);
        System.out.println("11-20 |" + asterisk[2]);
        System.out.println("21-30 |" + asterisk[3]);
        System.out.println("31-40 |" + asterisk[4]);
        System.out.println("41-50 |" + asterisk[5]);
    }
}

MAIN CLASS-

import TurtleGraphics.KeyboardReader;

public class ArrayEx4 {

    public static void main(String[] args) {

        KeyboardReader reader = new KeyboardReader();
        Ex4Method object = new Ex4Method();

        int[] nums = new int[20];
        int i = 0;
        System.out.print("Enter a number (1-50): ");
        nums[i] = reader.readInt();
        while (nums[i] >= 1 && nums[i] <= 50 && i < 19) {

            i++;
            System.out.print("Enter a number (1-50): ");
            nums[i] = reader.readInt();
            //occurences[nums[i]]++;

        }
        //for(int x=0;x<=4;x++) {
        //System.out.println(occurences[x]);
        //}

        object.Average(nums);
        object.MaxAndRange(nums);
        object.findMedian(nums);
        object.Mode(nums);
        object.Histogram(nums);

    }
}

Any suggestions? Thanks

This is the code right here:

public void Histogram(int[] f) {

    String[] asterisk = new String[6];

    System.out.println("Histogram: ");
    System.out.println(" ");
    for (int i = 0; i <= f.length - 1; i++) {

        if (f[i] >= 1 && f[i] <= 10) {
            asterisk[1] += "*";
        }
        if (f[i] >= 11 && f[i] <= 20) {
            asterisk[2] += "*";
        }
        if (f[i] >= 21 && f[i] <= 30) {
            asterisk[3] += "*";
        }
        if (f[i] >= 31 && f[i] <= 40) {
            asterisk[4] += "*";
        }
        if (f[i] >= 41 && f[i] <= 50) {
            asterisk[5] += "*";
        }
    }

    System.out.println(" 1-10 |" + asterisk[1]);
    System.out.println("11-20 |" + asterisk[2]);
    System.out.println("21-30 |" + asterisk[3]);
    System.out.println("31-40 |" + asterisk[4]);
    System.out.println("41-50 |" + asterisk[5]);
}

More specifically, this part:

asterisk[i] += "*";

In Java, + operator for strings means concatenation, and both operands are converted to strings beforehand.

At the very beginning, new String[6] is filled with default values for String type, which, for any type inherited from java.lang.Object is a null value. When you concatenate using operators, the very first pass over any slot in the array will always encounter a null value.

And

String.valueOf(null) + "*"

will output "null*"

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