所以我必须做以下事情:
“在Java程序中声明一百个数字,计算它们的平均值,并找出有多少数字高于平均值。”
public class Main {
public static void main(String[] args) {
double[] list = new double[100];
int x = 1;
while(x<=100){
for(int i = 0; i<100; i++){
list[i] = x;
}
x++;
}
double sum = 0;
int j = 0;
double average = 0;
while(j < list.length){
sum += list[j];
average = sum / list.length;
j++;
}
for(int i = 0; i<100; i++){
if(list[i] > average){
System.out.println(list[i] + "is larger than the average");
}
}
}
}
我可以看到的问题是将所有数字分配到list
数组,最多为100。当我因某种原因检查列表数组时,我只有所有键的数字100。
答案 0 :(得分:3)
您不需要while
循环,它会使您的数组的每个索引包含相同的值,因此只需替换此循环
while(x<=100){
for(int i = 0; i<100; i++){
list[i] = x;
}
x++;
}
有了这个循环
for(int i = 0; i<100; i++){
list[i] = i+1;
}
或更好:
for(int i = 0; i<list.length; i++){
list[i] = i+1;
}
答案 1 :(得分:2)
你的while循环中有一个for循环。这意味着当x为100时,for循环将用100填充数组 不需要while循环。试试
for(int i = 0; i<100; i++)
{
list[i] = i+1;
}
答案 2 :(得分:2)
在Java 8中,您可以使用一个衬垫执行此操作:
final int[] numbers = IntStream.rangeClosed(1, 100).toArray();
final double average = IntStream.rangeClosed(1, 100).average().getAsDouble();
final int[] aboveAverageNumbers = IntStream.rangeClosed(1, 100).filter(number -> number > average).toArray();
虽然它不是最佳解决方案,但看起来很酷:)
请记住使用您要检查的选项是否存在。
我也重复自己创建了IntStream
,它看起来并不漂亮,但我无法重复使用相同的流两次 - 我也建议您阅读此内容。
如果您不想创建它,就像在第二个和第三个示例中使用IntStream.of(numbers)
而不是IntStream.rangeClosed(1, 100)
一样。
你错了什么以及为什么
在这个循环中:
double[] list = new double[100];
int x = 1;
while(x<=100){
for(int i = 0; i<100; i++){
list[i] = x;
}
x++;
}
有一切邪恶的根源。在while
循环中,您将从1迭代到100。
你在里面从0到100迭代。
在while循环的第一步中,您将为列表1中的所有值分配。
你看到了吗?
在while
循环的第二步中,您将为整个列表创建另一个for
循环。所以现在你要分配每个字段值2.等等......
这样,您的列表包含每个单元格的值等于100 - while
循环的最后一步。
一个循环就足够了,例如
for(int i=0; i < 100; i++){
list[i] = i + 1;
}
祝你好运!
答案 3 :(得分:1)
你有两个循环,但你只需要一个。
public static void main(String[] args) {
double[] list = new double[100];
for(int i = 0; i<list.length; i++){
list[i] = i+1;
}
double sum = 0;
for(double d : list){
sum += d;
}
double average = sum/list.length;
for(double d : list){
if(d > average){
System.out.println(d + " is larger than the average");
}
}
}
答案 4 :(得分:1)
如果您始终有算术序列,则无需再次遍历数组以查找总和。使用公式,在您的情况下:(n*(n+1))/2
。如果它不是算术序列,则在将值分配给数组时再次找到sum
。
这是您的简化代码:
public static void main(String[] args) {
double[] list = new double[100];
for (int i = 0; i < 100; i++) {
list[i] = (i + 1);
}
double sum = (100 * 101) / 2;
double average = sum / list.length;
for (int i = 0; i < 100; i++) {
if (list[i] > average) {
System.out.println(list[i] + " is larger than the average");
}
}
}
编辑:如果您想为数组分配随机数。
public static void main(String[] args) {
double[] list = new double[100];
Random rand = new Random();
double sum = 0;
for (int i = 0; i < 100; i++) {
list[i] = rand.nextInt(100);
sum += list[i];
}
double average = sum / list.length;
for (int i = 0; i < 100; i++) {
if (list[i] > average) {
System.out.println(list[i] + " is larger than the average");
}
}
}
答案 5 :(得分:1)
public class Main {
public static int[] getArray(int size) {
int[] output = new int[size];
for (int i = 0; i < size; i++) {
output[i] = i + 1;
}
return output;
}
public static double avg(int[] input) {
int sum = 0;
for (int i = 0; i < input.length; i++) {
sum += input[i];
}
return sum / input.length; //Do not call this with an empty array
}
public static double largerCount(int[] input) {
int larger = 0;
double average = avg(input);
for (int i = 0; i < input.length; i++) {
if (input[i] > average) {
larger++;
}
}
return larger;
}
public static void main(String[] args) {
int[] input = getArray(100);
System.out.println(largerCount(input) + " elements are larger than the average of " + avg(input));
}
}
这样代码更容易理解,简化了工作。
答案 6 :(得分:0)
while循环中有一个嵌套循环。对于x,(0-100),将更新数组中的项目。在x = 100的最后一个外循环中,数组将具有所有值100
答案 7 :(得分:0)
可以用这种简单的方式完成:
int[] list = new int[100];
int sum = 0;
double average = 0;
for(int i=0; i<100 ; i++){
list[i] = i+1;
sum = sum + list[i];
}
average = (double) sum / list.length; // casting to double
for(int i=0; i<100 ; i++){
if(list[i] > average){
System.out.println(list[i] + " is larger than the average");
}
}
答案 8 :(得分:0)
试试这个
public class Main {
public static void main(String[] args) {
int[] list = new int[100];
int x = 1;
while (x <= 100) {
for (int i = 0; i < 100; i++) {
list[i] = x;
x++;
}
}
double sum = 0;
int j = 0;
double average = 0;
while (j < list.length) {
sum += list[j];
j++;
}
average = sum / list.length;
System.out.println("Sum:" + sum);
System.out.println("Avg:" + average);
for (int i = 0; i < 100; i++) {
if (list[i] > average) {
System.out.println(list[i] + "is larger than the average");
}
}
}
}