Java - 我的程序没有打印出值?

时间:2017-04-09 19:41:50

标签: java arrays for-loop methods

此代码编译,并且支持在用户输入的字符串中计算0-9中的数字整数并返回数字(因此,如果用户输入012234445666679,则输出为[1,1,2,1, 3,1,4,1,0,1])但是,在用户输入字符串后,没有任何反应!我错过了一些明显的东西吗我有返回和system.out.print指示,显然无济于事......

    import java.util.*;

    class RepeatedDigits
    {
        public static int [] countNumbers (String numberInput)
        {
            int [] numCount = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

            for (int i = 0; i < numberInput.length(); i++)
            {
                if (numberInput.charAt(i) == '0')
                {
                    numCount[0]++;
                }
                    if (numberInput.charAt(i) == '1')
                {
                    numCount[1]++;
                }
                if (numberInput.charAt(i) == '2')
                {
                    numCount[2]++;
                }
                if (numberInput.charAt(i) == '3')
                {
                    numCount[3]++;
                }
                if (numberInput.charAt(i) == '4')
                {
                    numCount[4]++;
                }
                if (numberInput.charAt(i) == '5')
                {
                    numCount[5]++;
                }
                if (numberInput.charAt(i) == '6')
                {
                    numCount[6]++;
                }
                if (numberInput.charAt(i) == '7')
                {
                    numCount[7]++;
                }
                if (numberInput.charAt(i) == '8')
                {
                    numCount[8]++;
                }
                if (numberInput.charAt(i) == '9')
                {
                    numCount[9]++;
                }
            }
            System.out.println(Arrays.toString(numCount)); 
            return numCount;
        }

     public static void main (String [] args)
    {
        System.out.println("Please type in integers: ");
        Scanner userNumbers = new Scanner(System.in); 
        String numberInput = userNumbers.nextLine();
    }

}

另外,我试图找到一种方法让它忽略负号并同时取正负值(例如将-1计为1)。任何有关如何做到这一点的建议都会非常有帮助。

4 个答案:

答案 0 :(得分:1)

你的程序在启动时会运行Main()。

您创建了一个名为countNumbers()的函数,但它实际上从来没有从Main()

调用

您可能希望将此行添加到Main()的末尾:

countNumbers(numberInput);

否则它永远不会发生。

答案 1 :(得分:0)

这是因为你真的打印出numCount数组中的元素,它就是一个计数数组,而不是用户输入的实际数字。从技术上讲,您所拥有的代码是打印numCount,在输入0123456789后会产生{1,1,1,1,1,1,1,1,1,1}因为每个号码将被计算一次。如果您想要返回用户输入的数字,那么您将不得不遍历数组,并且根据numCount[i]的值,您需要多少次打印出i。我建议更换

System.out.println(Arrays.toString(numCount));

for(int i = 0; i < numCount.length; i++){
    for(int j = 0; j < numCount[i]; j++){
        System.out.print(i + ' ');
    }
}

答案 2 :(得分:0)

您必须将countNumbers调用到主要方法中。

在你的主要方法中尝试这个。

 public static void main (String [] args)
{
    System.out.println("Please type in integers: ");
    Scanner userNumbers = new Scanner(System.in); 
    String numberInput = userNumbers.nextLine();
    System.out.println(Arrays.toString(countNumbers(numberInput)));
}

答案 3 :(得分:0)

您刚刚定义了countNumbers()方法,但是您没有从main()调用它,它应该按如下方式完成:

此外,以下countNumbers()逻辑使用流可以轻松查找/计算每个数字在字符串内发生的次数。

public static void main (String [] args) {
      System.out.println("Please type in integers: ");
      Scanner userNumbers = new Scanner(System.in); 
      String numberInput = userNumbers.nextLine();
      System.out.println(countNumbers (numberInput));
}

public static long [] countNumbers (String numberInput) {
        String[] inputNumbers = numberInput.split("");
        long[] output = Arrays.stream(inputNumbers).collect(
                Collectors.groupingBy(
                Function.identity(), Collectors.counting()
           )
        ).entrySet().stream().
            map(elemenet -> elemenet.getValue()).
            mapToLong(Long::longValue).toArray();
        return output;
}