Java 生成直方图和星图时输出不正确
我试图制作一个柱状图,用户输入1-100之间的数字,然后程序会看到1-10、11-20中有多少数字,等等 目前,如果输入为12345678,则列表81-90将显示8颗星,所有列表都有8颗星。显然,这不是我想要的,但我被难住了 代码如下:Java 生成直方图和星图时输出不正确,java,arrays,Java,Arrays,我试图制作一个柱状图,用户输入1-100之间的数字,然后程序会看到1-10、11-20中有多少数字,等等 目前,如果输入为12345678,则列表81-90将显示8颗星,所有列表都有8颗星。显然,这不是我想要的,但我被难住了 代码如下: import java.util.*; public class test5 { public static void main (String [] args) { int i = 0; int[] Array = new int[10]; L
import java.util.*;
public class test5
{
public static void main (String [] args)
{
int i = 0;
int[] Array = new int[10];
List<Integer> list = new ArrayList<Integer>();
Scanner s = new Scanner(System.in);
System.out.println ("Please enter any number of values (from 1 - 100 only) ending with -1 when done:");
while(i != -1){
i = s.nextInt();
if(i != -1)
list.add(i);
}
for (int a = 0; a < list.size(); a++){
int range1 = 1;
int range2 = 10;
for (int b = 0; b < list.size(); b++){
if (list.get(b) >= range1 && list.get(b) <= range2)
Array[a] += 1;
}
range1 += 10;
range2 += 10;
}
for (int count = 0; count < 10; count++){
System.out.print("| " + (count*10+1) + (count == 0 ? " ": "") + " - " + (count*10+10) + (count == 9 ? "" : " ")
+ "| \t");
for(int h = 0; h < Array[count]; h++)
System.out.print("*");
System.out.println();
}
}
}
import java.util.*;
公共类测试5
{
公共静态void main(字符串[]args)
{
int i=0;
int[]数组=新的int[10];
列表=新的ArrayList();
扫描仪s=新的扫描仪(System.in);
System.out.println(“请输入任意数量的值(仅限1-100),完成后以-1结尾:”;
而(i!=-1){
i=s.nextInt();
如果(i!=-1)
列表.添加(i);
}
对于(int a=0;a 如果(list.get(b)>=range1&&list.get(b)更改第一个for循环
在您的第一个for循环中,range1和range2不会更改。因为它们被重新标记,并且在执行修改后range1和range2不会被使用:range1+=10;range2+=10;
在代码Array(int[])中,它存储范围数据的数量,例如
数组[0]存储范围为| 1-10的值的数量|
数组[1]存储范围为| 11-20的值的数量|
数组[9]存储范围为| 90-100的值的数量|
我们可以使用一种简单的方法来增加指定数据范围内的值的数量
以数字11为例,我们可以使用数组[11/10]+=1,这等于数组[1]+=1
确保range1和range2是正确的,或者按照我在下面提到的解决方案进行操作:
改变
for (int a = 0; a < list.size(); a++){
int range1 = 1;
int range2 = 10;
for (int b = 0; b < list.size(); b++){
if (list.get(b) >= range1 && list.get(b) <= range2)
Array[a] += 1;
}
range1 += 10;
range2 += 10;
}
控制台中的输出:
| 1 - 10 |
| 11 - 20 | **
| 21 - 30 | *
| 31 - 40 | **
| 41 - 50 |
| 51 - 60 |
| 61 - 70 |
| 71 - 80 |
| 81 - 90 |
| 91 - 100|
改变你的第一个for循环
在您的第一个for循环中,range1和range2不会更改。因为它们被重新标记,并且在执行修改后range1和range2不会被使用:range1+=10;range2+=10;
在代码Array(int[])中,它存储范围数据的数量,例如
数组[0]存储范围为| 1-10的值的数量|
数组[1]存储范围为| 11-20的值的数量|
数组[9]存储范围为| 90-100的值的数量|
我们可以使用一种简单的方法来增加指定数据范围内的值的数量
以数字11为例,我们可以使用数组[11/10]+=1,这等于数组[1]+=1
确保range1和range2是正确的,或者按照我在下面提到的解决方案进行操作:
改变
for (int a = 0; a < list.size(); a++){
int range1 = 1;
int range2 = 10;
for (int b = 0; b < list.size(); b++){
if (list.get(b) >= range1 && list.get(b) <= range2)
Array[a] += 1;
}
range1 += 10;
range2 += 10;
}
控制台中的输出:
| 1 - 10 |
| 11 - 20 | **
| 21 - 30 | *
| 31 - 40 | **
| 41 - 50 |
| 51 - 60 |
| 61 - 70 |
| 71 - 80 |
| 81 - 90 |
| 91 - 100|
试试这个
for (int count = 0; count < 10; count++) {
int start = count * 10 + 1;
int end = count * 10 + 10;
System.out.print("| " + (count * 10 + 1) + (count == 0 ? " " : "") + " - " + (count * 10 + 10) + (count == 9 ? "" : " ") + "| \t");
for (int h = 0; h < list.size(); h++)
if (list.get(h) >= start && list.get(h) <= end)
System.out.print("*");
System.out.println();
}
for(int count=0;count<10;count++){
int start=计数*10+1;
int end=计数*10+10;
系统输出打印(“|”+(计数*10+1)+(计数=0?”:”)+“-”+(计数*10+10)+(计数=9?”:”)+“|\t”);
对于(int h=0;h=start&&list.get(h)试试这个
for (int count = 0; count < 10; count++) {
int start = count * 10 + 1;
int end = count * 10 + 10;
System.out.print("| " + (count * 10 + 1) + (count == 0 ? " " : "") + " - " + (count * 10 + 10) + (count == 9 ? "" : " ") + "| \t");
for (int h = 0; h < list.size(); h++)
if (list.get(h) >= start && list.get(h) <= end)
System.out.print("*");
System.out.println();
}
for(int count=0;count<10;count++){
int start=计数*10+1;
int end=计数*10+10;
系统输出打印(“|”+(计数*10+1)+(计数=0?”:”)+“-”+(计数*10+10)+(计数=9?”:”)+“|\t”);
对于(int h=0;h 如果(list.get(h)>=start&&list.get(h),这是一个实时演示,允许用户指定数字,并根据数字分布显示十个直方图条:
方法条执行直方图逻辑。这里是一个现场演示,允许用户指定数字,并根据数字分布显示十个直方图条:
方法条执行直方图逻辑。您确定列表
中有一个size-get-code不能引发该异常,但现在出现了一个新问题,如上面编辑的帖子所示。您确定列表
中有一个size-get-code不能引发该异常,但现在出现了一个新问题,如上面编辑的帖子所示。Th谢谢你的帮助!我输入了你的代码,它工作得很好。但是,我想看看我的旧代码是否能正常工作,所以我把范围变量放在循环之前,这样他们就不会一直把自己设置为相同的东西,但仍然不起作用。我的第一个循环是可以修复的,还是真的应该被抛出并与你的循环一起使用?顺便说一下,这是一个很好的解决方案。@vb这是因为在第一个循环中,您应该迭代10次(有10个范围),而不是list.size()timesOh哇。谢谢你让我注意到这一点。至少我与我的原始代码接近了。谢谢你的帮助!我输入了你的代码,它工作得很好。但是,我想看看我是否能让我的旧代码正常工作,所以我将范围变量放在循环之前,这样它们就不会一直将自己设置为相同的值但它仍然不起作用。我的第一个循环是可以修复的,还是真的应该扔掉并和你的一起放入?顺便说一下,这是一个很好的解决方案。@vb这是因为在第一个循环中,你应该迭代10次(有10个范围),而不是list.size()timesOh哇。谢谢你让我注意到了这一点。至少我的原始代码差不多完成了。谢谢你的帮助!这也是另一个聪明的解决方案。谢谢你的帮助!这也是另一个聪明的解决方案。
$ java Test5
Please enter any number of values (from 1 - 100 only) ending with -1 when done:
1
2
3
44
66
12
13
100
16
-1
| 1 - 10 | ***
| 11 - 20 | ***
| 21 - 30 |
| 31 - 40 |
| 41 - 50 | *
| 51 - 60 |
| 61 - 70 | *
| 71 - 80 |
| 81 - 90 |
| 91 - 100| *