计算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]);
}
}