Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从文件到数组的直方图_Java_Arrays_Histogram - Fatal编程技术网

Java 从文件到数组的直方图

Java 从文件到数组的直方图,java,arrays,histogram,Java,Arrays,Histogram,我基本上是java和编程的初学者,我有这个问题。我有一个文件(包含从0到10的数字,随机),我需要将它存储到数组B[I],I=0…10,这样B[0]包含零的数量,B[1]包含1的数量等等。例如,如果我的文件中有三个“1”,那么B[1]=3。我创建了以下代码: 导入java.io.File; 导入java.io.FileNotFoundException; 导入java.util.Scanner; 公开课历史{ 公共静态void main(字符串[]args)引发FileNotFoundExcep

我基本上是java和编程的初学者,我有这个问题。我有一个文件(包含从0到10的数字,随机),我需要将它存储到数组B[I],I=0…10,这样B[0]包含零的数量,B[1]包含1的数量等等。例如,如果我的文件中有三个“1”,那么B[1]=3。我创建了以下代码:

导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Scanner;
公开课历史{
公共静态void main(字符串[]args)引发FileNotFoundException{
File File=新文件(“in.txt”);
扫描仪sc=新扫描仪(文件);
int[]B=新的int[10];
对于(int i=0;i<10;i++){
整数和=0;
while(sc.hasNextLine()){
int k=sc.nextInt();
System.out.println(i);//控制行
如果(i==k){
总和=总和+1;
B[i]=总和;
}
}
}    
sc.close();
用于(浮动x:B){
System.out.println(x);//看看B是什么样子
}
}
}

作为输出,我得到了20个零。因此,我的代码似乎没有遍历i,但我不明白为什么。

如果文件只包含int值,则不需要逐行读取

int[]B=新的int[10];
File File=新文件(“in.txt”);
try(Scanner sc=new Scanner(file)){//使用try with resources自动关闭扫描仪
while(sc.hasnetint()){
B[sc.nextInt()]+;
}
System.out.println(“直方图:“+Arrays.toString(B));
}
注意:如果文件中的数字为0到10(含),则
B
的大小必须为11


更新
如果直方图需要显示为2个数组,其中第一个数组的值从1到5(包括1到5),第二个数组的值从6到10,则可以实现如下简单操作:

int[]count1to5=新的int[5];
int[]count6to10=新int[5];
File File=新文件(“in.txt”);
尝试(扫描仪sc=新扫描仪(文件)){
while(sc.hasnetint()){
int n=sc.nextInt();
//选择计数数组
int[]接收器=n>5?计数6到10:计数1到5;
接收器[(n-1)%5]+;//按1更正索引
}
System.out.println(“直方图1到5:+Arrays.toString(count1to5));
System.out.println(“直方图6到10:+Arrays.toString(count6to10));
}

类似地,2D数组可用于为
min
max
之间的连续数字范围建立直方图,并划分为
长度
值的子范围:

intmin=1;
int max=10;
整数长度=5;
int子范围=(int)Math.ceil((max+1.0-min)/长度);
int[][]直方图=新的int[子范围][长度];
File File=新文件(“in.txt”);
尝试(扫描仪sc=新扫描仪(文件)){
while(sc.hasnetint()){
int n=sc.nextInt()-min;//按min移位索引
//选择子范围
int[]接收器=直方图[n/长度];
receiver[n%length]++;//行内索引正确
}
对于(int i=0;i
谢谢您的回答。我还有一个问题。如果我想创建两个数组(大小相等,假设文件包含1-10的整数),第一个数组扫描所有文件,但只关心数字1-5并对其进行计数,第二个数组只关心数字6-10。我不想创建一个大数组,然后将其拆分,我希望从begging中得到两个数组。这可能吗?@Meronam,一切都可能,请检查更新