代码之家  ›  专栏  ›  技术社区  ›  Dorkymon

使用系统在输出处获取null。出来打印F

  •  -3
  • Dorkymon  · 技术社区  · 6 年前

    我有一个方法,它执行以下操作:

    • 统计小写元音的数量
    • 为每个元音的字符串数组添加一个星形
    • 打印元音和星号的数量

    输出如下所示:

    Sentence: There is a wolf in the woods
    There were: 
    1 A's null* 
    3 E's null*** 
    2 I's null** 
    3 O's null*** 
    0 U's null
    

    问题是,我不知道为什么会出现这些空关键字。

    你能解释一下他们是怎么到那里的以及如何摆脱他们的吗?

        public void printStars (String inputString) {
        int[] vowelCounter = new int[5];
        String[] starCounter = new String[5];
    
        for (int i = 0; i < inputString.length(); i++) {
            if (inputString.charAt(i) == 'a') {
                vowelCounter[0]++;
                starCounter[0] += "*";
            }
            else if (inputString.charAt(i) == 'e') {
                vowelCounter[1]++;
                starCounter[1] += "*";
            }
            else if (inputString.charAt(i) == 'i') {
                vowelCounter[2]++;
                starCounter[2] += "*";
            }
            else if (inputString.charAt(i) == 'o') {
                vowelCounter[3]++;
                starCounter[3] += "*";
            }
            else if (inputString.charAt(i) == 'u') {
                vowelCounter[4]++;
                starCounter[4] += "*";
            }
        }
        System.out.println(inputString);
        System.out.println("There were: ");
        System.out.printf("%d A's %s %n", vowelCounter[0], starCounter[0]);
        System.out.printf("%d E's %s %n", vowelCounter[1], starCounter[1]);
        System.out.printf("%d I's %s %n", vowelCounter[2], starCounter[2]);
        System.out.printf("%d O's %s %n", vowelCounter[3], starCounter[3]);
        System.out.printf("%d U's %s %n", vowelCounter[4], starCounter[4]);
    }
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Andreas LppEdd    6 年前

    您没有初始化的值 starCounter ,因此默认情况下,所有值都为null。

    在开头添加以下内容:

    for (int i = 0; i < starCounter.length(); i++) {
       starCounter[i] = "";
    }
    
        2
  •  0
  •   Roni Koren Kurtberg    6 年前
    String[] starCounter = new String[5];
    

    创建时,所有元素都为null。

    因此, starCounter[1] += "*" -&燃气轮机;“空*”

    例如,您可以执行更新方法:

    public static void updateStartCounter(String[] starCounter, int index, String addedValue){
        if (starCounter[index] == null){
            starCounter[index] = addedValue;
        } else {
            starCounter[index] += addedValue;
        }
    }
    

    而不是做: starCounter[0] += "*"; ,您可以执行以下操作: updateStartCounter(starCounter, 0, "*");

    我的方法对非元音字母没有用。

    您可以创建 List<String> starCounter = new ArrayList<>(5); 然后在那里做同样的把戏。在打印区域之前,只需检查 starCounter 大于0,然后进行打印。

        3
  •  0
  •   3vts    6 年前

    如创建时其他答案所述 starCounter 将其所有元素设置为 null 因此,每次添加 * 将会有一个领先的 无效的 。您可以使用的另一种解决方案是在同一行上创建和初始化变量
    String[] starCounter = new String[5];
    使用:
    String[] starCounter = {"","","","",""};