我正在尝试计算数组中整数的出现次数。我希望能够修改以下循环来计算字符...
for (int i = 0; i < chars.length; i++)
counts[chars[i] - 'a']++;
我尝试像这样修改它但得到一个ArrayIndexOutOfBoundsException错误......
for (int i = 0; i < ints.length; i++)
counts[ints[i] - '0']++;
有什么想法吗?
我搜索了许多类似标题的问题,但没有按我需要的方式搜索。
已更新
这是我更新的代码。用户输入编号为1到25的整数。程序应该使用另一个数组计算这些整数的出现次数。我使用...
更新了代码counts[vals[i] - 1]++;
允许程序编译。但是,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] );
}
}
}
现在,我需要的是显示输入的整数的出现次数。如果我输入1 1 2 2 2,结果应为2 3 0 0 0 ... 0。
答案 0 :(得分:2)
- 'a'
的要点是减去'a'
(97)的ASCII值,使'a'
落入索引0,'z'
落入索引25,假设因为chars
只包含小写字母字符。
如果ints
是包含数字字符的char
数组,即'0'
和'9'
之间的值,那么您的代码就可以使用。更有可能的是,它实际上是一个int
数组,通过减去'0'
(ASCII 48),你最终会得到一个负数索引。
要解决此问题,只需删除char减法:
counts[ints[i]]++;
答案 1 :(得分:1)
for (int i = 0; i < counts.length; i++) {
counts[vals[i]-1]++;
}
这是问题所在,因为您有counts.length
而不是numOfVals
。对于每个输入的值,循环应该将某个数字的计数增加1,因此您必须保持循环,直到计算每个输入的值。
如果您使用counts.length
,如果ArrayIndexOutOfBoundsException
小于numOfVals
,则会25
(因为counts.length
已初始化为25
) 。如果numOfVals
大于25
,则只计算前25个输入。
因此解决方案是:
for (int i = 0; i < numOfVals; i++) {
counts[vals[i]-1]++;
}
现在,您使用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]);
}
}
请注意,如果用户输入的值超过200,您也会获得ArrayIndexOutOfBoundsException
,因为MAX_NUM_OF_VALUES
为200,但您无法实际执行此操作。
答案 2 :(得分:-4)
试图猜测...你需要计算eacth整数的ocorrences? 喜欢这个?
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]));