未在此代码中获得所需的输出

时间:2017-04-04 07:51:55

标签: java

import java.util.Scanner;

public class Occurrence {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        String input = scan.next();
        int[] numberAmount = new int[10];
        for (int i = 0; i < input.length(); i++) {
            switch (input.charAt(i)) {
                case 0: 
                    numberAmount[0] += 1;
                    break;
                case 1: 
                    numberAmount[1] += 1;
                    break;
                case 2: 
                    numberAmount[2] += 1;
                    break;
                case 3: 
                    numberAmount[3] += 1;
                    break;
                case 4: 
                    numberAmount[4] += 1;
                    break;
                case 5: 
                    numberAmount[5] += 1;
                    break;
                case 6: 
                    numberAmount[6] += 1;
                    break;
                case 7: 
                    numberAmount[7] += 1;
                    break;
                case 8: 
                    numberAmount[8] += 1;
                    break;
                case 9: 
                    numberAmount[9] += 1;
                    break;
            }
            } 
        for (int i = 0; i <= 9; i++) {
            System.out.printf("%d: %d\n", i, numberAmount[i]);
        }


    }

}

我们接到了一个任务,我们必须看到一个数字出现频率的次数。

示例1:
011011011120203
输出:
0:5
1:7
2:2
3:1
4:0
5:0
6:0
7:0
8:0
9:0

当我运行我的代码并输入一个数字时,所有数字的值都是0.我做错了什么?如果解决方案很明显的话,我很高兴转换语句

5 个答案:

答案 0 :(得分:3)

问题正在发生,因为function getItemPrice(item){ var index = item.attr("id").replace(/[^0-9.]/g, ""); var item_id = $('#purchaseorderdetail-'+ index + "-item_id").val(); $.get('../item/get-price', {id : item_id}, function(data){ $('#purchaseorderdetail-' + index + '-price').val(data); $('#purchaseorderdetail-' + index + '-qty').val(1); $('#purchaseorderdetail-' + index + '-total').val(data); }); calculateTotal(Number(index)+1); } function calculateSubtotal(item){ var index = item.attr("id").replace(/[^0-9.]/g, ""); var qty = $('#purchaseorderdetail-' + index + '-qty').val(); qty = qty == "" ? 0 : Number(qty.split(",").join("")); var price = $('#purchaseorderdetail-' + index + '-price').val(); price = price == "" ? 0 : Number(price.split(",").join("")); $('#purchaseorderdetail-' + index + '-total').val(qty * price); calculateTotal(Number(index)+1); } function calculateTotal(index){ var total = 0; for(i=0; i< index; i++){ var subtotal = $('#purchaseorderdetail-' + i + '-total').val(); subtotal = subtotal == "" ? 0 : Number(subtotal.split(",").join("")); alert(subtotal); total = total + subtotal; } $('#purchaseorder-total').val(total); } 不等于'1'

1是一个整数
1是一个字符,对应的int值为'1'

因此,代码中最简单的方法就是

48

<强>假设

INPUT字符串由数值组成。

答案 1 :(得分:1)

正如@niyasc在另一个答案中所说,字符的隐含整数值不是显示数字的值。

您可以使用Character.getNumericValue获取所需的值。

switch (Character.getNumericValue(input.charAt(i)))

为确保所有字符都是数字,您可能希望在switch声明之前使用Character.isDigit

if(Character.isDigit(input.charAt(i))){

    // do stuff
    // switch....


}
else{

   // warn user / ask for new input
}

答案 2 :(得分:1)

另一种实现方式如下:

switch (input.charAt(i)) {
            case '0': 
                numberAmount[0] += 1;
                break;
            case '1': 
                numberAmount[1] += 1;
                break;
            case '2': 
                numberAmount[2] += 1;
                break;
            case '3': 
                numberAmount[3] += 1;
                break;

将所有案例值设为char,方法是将它们括在单引号中。

答案 3 :(得分:0)

在开关的情况下,你得到的是一个字符串。请输入一个数字,然后运行您的程序。它会起作用

答案 4 :(得分:0)

其他答案已将匹配更改为charint,但实际上您不需要使用switch-case,请尝试以下代码:

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    String input = scan.next();
    int[] numberAmount = new int[10];
    for (int i = 0; i < input.length(); i++) {
        numberAmount[(int)input.charAt(i) - 48] ++; // This is enough
    }
    for (int i = 0; i <= 9; i++) {
        System.out.printf("%d: %d\n", i, numberAmount[i]);
    }
}