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.我做错了什么?如果解决方案很明显的话,我很高兴转换语句
答案 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)
其他答案已将匹配更改为char
至int
,但实际上您不需要使用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]);
}
}