计算java数组中整数的出现次数

计算java数组中整数的出现次数,java,arrays,Java,Arrays,我试图计算数组中整数的出现次数。我想能够修改以下循环计数字符 for (int i = 0; i < chars.length; i++) counts[chars[i] - 'a']++; 它允许程序编译。但是,count的所有值都是零 更新的代码 import java.util.Scanner; class CountIntOccurs { private static final int MAX_NUM_OF_VALUES = 200; public

我试图计算数组中整数的出现次数。我想能够修改以下循环计数字符

for (int i = 0; i < chars.length; i++)
     counts[chars[i] - 'a']++;
它允许程序编译。但是,count的所有值都是零

更新的代码

import java.util.Scanner;


class CountIntOccurs
{
   private static final int MAX_NUM_OF_VALUES = 200;

   public static void main ( String [] args )
   {
      Scanner in = new Scanner( System.in );
      int[] vals = new int[MAX_NUM_OF_VALUES];
      int numOfVals = 0;

      // Read and store values
      System.out.println( "Enter integers <= 25, one per line, hit control-Z when done: " );
      while ( in.hasNextLine() )
      {
         vals[numOfVals] = Integer.parseInt( in.nextLine() );
         ++numOfVals;
      }

      // Close application if no values entered
      if ( numOfVals == 0 )
         System.exit( 0 );


      //  declare counts array   
      int[] counts = new int[25];


      System.out.println( counts.length );

      //??????? For each integer in the array, count it
      for (int i = 0; i < counts.length; i++){
         counts[vals[i] - 1]++; 
      }



      //display values enetered
      for ( int i = 0; i < numOfVals; ++i )
      {
            System.out.println( vals[i] );
      }


      //?????? display counted integers????
      for ( int i = 0; i < counts.length; ++i )
      {
            System.out.println( counts[i] );
      }


   }
}
import java.util.Scanner;
类计数发生
{
私有静态最终int MAX_NUM_OF_值=200;
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
int[]VAL=新的int[最大数值];
int numofals=0;
//读取并存储值

System.out.println(“输入整数的点
-'a'
是减去
'a'
(97)的ASCII值,使
'a'
落入索引0而
'z'
落入索引25,假设
字符只包含小写字母字符

如果
ints
是一个包含数字字符的
char
数组,即
'0'
'9'
之间的值,那么代码就可以工作。更可能的是,它实际上是一个
int
数组,通过减去
'0'
(ASCII 48),最终得到一个负索引

要解决此问题,只需删除字符减法:

counts[ints[i]]++;

尝试猜测…您需要计算每个整数的O相关性吗? 像这样

   int[] counts = new int[25];
    for (int i = 0; i < counts.length; i++)
        if (ints[i] >= 1 &&  ints[i] <= 25)
            counts[ints[i]-1]++;

   for (int i = 0; i < counts.length; i++)
     if (counts[i] > 0)
       System.out.println("number " + String.valueOf(i) + " counts " + String.valueOf(counts[i]));
int[]计数=新的int[25];
for(int i=0;i=1&&整数[i]0)
System.out.println(“number”+String.valueOf(i)+“counts”+String.valueOf(counts[i]);
现在,您正在使用
println()
而不是
print()
在新行上打印每个数字,并且您不打印任何文本,因此很难解释程序的输出。我对程序进行了一些表面更改,以使其更易于理解。以下是完整的程序:

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int[] vals = new int[MAX_NUM_OF_VALUES];
    int numOfVals = 0;

    System.out.println( "Enter integers <= 25, one per line, hit control-Z when done: " );
    while (in.hasNextLine()) {
        vals[numOfVals] = Integer.parseInt(in.nextLine());
        ++numOfVals;
    }
    if(numOfVals == 0)
        System.exit(0);

    int[] counts = new int[25];

    //changed counts.length to numOfVals
    for (int i = 0; i < numOfVals; i++) {
        counts[vals[i]-1]++; 
    }

    //display values entered
    System.out.print("Entered values: ");
    for (int i = 0; i < numOfVals; ++i) {
        System.out.print(vals[i]);
    }
    System.out.println(); //new line

    //display counted integers
    System.out.print("Counts of the values: ");
    for (int i = 0; i < counts.length; ++i) {
        System.out.print(counts[i]);
    }
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int[]VAL=新的int[最大数值];
int numofals=0;

System.out.println(“输入整数您能显示
ints[i]的声明吗?”
?它真的包含字符
'0'
'9'
,还是整数
0
9
?我猜是后者,它是不同的。整数包含随机整数值1到25是的,所以是整数。代码是减去
'0'
,这不是整数,而是字符。为什么
计数
初始化为
numofals
?如果用户输入1个值并且大于1怎么办?如果不是
counts=new int[25];
如果您的范围是1到25?(如果是0到25,那么做
new int[26]
)阅读他们的评论,我想他们可能需要
counts[int[I]-1]++
@Tunaki这会更节省空间,但不那么直观。不过,任何一种方法都可以。Tunaki…我使用了你的建议,程序可以编译,但是所有的计数值都是0。。。zero@codeRed在这种情况下,请提供一个。我们帮助您的能力是有限的。有大于8的整数(或9,可能是您在
new int[9]
中想要的)。我想您完全误解了这个问题。代码是计算字符数…您期望的是什么。不。它不是计算字符数。正如您自己所说:“只有整数…哼唱ok。”问题是他得到了一个
ArrayIndexOutOfBoundsException
,因为他从索引值中减去97(因为他把整数当作chars),但是
ints[i]
的值范围是0到24(或类似的值),而不是97到123,所以他在
计数[]中得到了一个负的索引值
。好的,我更改了答案。
   int[] counts = new int[25];
    for (int i = 0; i < counts.length; i++)
        if (ints[i] >= 1 &&  ints[i] <= 25)
            counts[ints[i]-1]++;

   for (int i = 0; i < counts.length; i++)
     if (counts[i] > 0)
       System.out.println("number " + String.valueOf(i) + " counts " + String.valueOf(counts[i]));
for (int i = 0; i < counts.length; i++) {
    counts[vals[i]-1]++; 
}
for (int i = 0; i < numOfVals; i++) {
    counts[vals[i]-1]++; 
}
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int[] vals = new int[MAX_NUM_OF_VALUES];
    int numOfVals = 0;

    System.out.println( "Enter integers <= 25, one per line, hit control-Z when done: " );
    while (in.hasNextLine()) {
        vals[numOfVals] = Integer.parseInt(in.nextLine());
        ++numOfVals;
    }
    if(numOfVals == 0)
        System.exit(0);

    int[] counts = new int[25];

    //changed counts.length to numOfVals
    for (int i = 0; i < numOfVals; i++) {
        counts[vals[i]-1]++; 
    }

    //display values entered
    System.out.print("Entered values: ");
    for (int i = 0; i < numOfVals; ++i) {
        System.out.print(vals[i]);
    }
    System.out.println(); //new line

    //display counted integers
    System.out.print("Counts of the values: ");
    for (int i = 0; i < counts.length; ++i) {
        System.out.print(counts[i]);
    }
}