当前位置: 首页 > 知识库问答 >
问题:

我无法通过for循环获得整数的平均值,它一直给我0,但我需要第一个数字之后的数字的平均值

郭胤
2023-03-14

代码应该得到第一个数字之后的数字的平均值,所以对于第一行[3 1 2 3],平均值是2.0,因为(1 2 3=6/3=2.0),但代码只给了我0。

public static void main(String[] args)throws IOException {
   
   File num = new File("numbers.txt");
   BufferedReader br = new BufferedReader(new FileReader(num));
   String st;
    
   int first, number ;
    
   while((st = br.readLine())!= null){
       int j= st.length()-1;
       int average =0;
       int i;
       first = Integer.parseInt(st.substring(0, st.indexOf(" ")));
       int sum = 0; // initialize sum
       for( i = j;i< j; i++ ){
          String str = st; //each line from the file
          String [] segments = str.split(" ");
          int [] values = Stream.of(segments)
                    .mapToInt(Integer::parseInt)
                    .toArray();
         
          for (int c = 0; c < values.length; c++){
             sum+=values[c];
          }
          sum = sum/first;
       }
       
       System.out.println("The average of the " + first + " integers"+ " " 
                  + st.substring(2) + " the average is "+ sum);
       
    } 
}

共有2个答案

公良莫希
2023-03-14

好吧,你让这变得非常困难。我推荐以下几点:

  • 使用扫描仪读取值。
Scanner scanner = new Scanner(new File(..));

然后您可以使用scanner.nextInt()将值作为int读取。如果您需要查看是否有更多int可用,您可以检查scanner.hasNextInt()

  • 没有必要使用数组,因为您可以在读取值时对其进行求和
  • 第一个值是计数,因此您可以获得平均值(并将其用作循环计数)。
  • 只需确保您将值求和为双精度而不是int。否则您将丢失分数。例如。10/4==210./4 == 2.5

查看扫描仪了解更多信息。

叶元凯
2023-03-14

在外部for循环中,用j初始化i,然后继续检查i是否

尽管在我看来,您根本不需要外循环,因为您从不使用i,如果执行多次,代码也没有意义。

 类似资料:
  • 我想计算最接近数组平均数的数字,我已经计算完平均数,但我不知道如何找到最接近平均数的数字。 }

  • 我有3个非常大的有符号整数。 我想计算它们的截断平均值。预期平均值是,即。 不可能计算为: 注:我读了所有关于2个数字的平均值的问题,但我不知道该技术如何应用于3个数字的平均值。 使用BigInteger将非常容易,但假设我不能使用它。 如果我转换为双精度,那么,当然,我会失去精度: 如果我转换为,它可以工作,但也让我们假设我不能使用它。 问题:有没有一种方法可以仅使用长类型来计算3个非常大整数的

  • 问题内容: 我希望函数计算Double型数组的平均值。该数组称为“投票”。现在,我有10个号码。 当我致电以获取阵列投票的平均值时,它不起作用。 这是我的代码: 我如何在此处称平均值以获得平均值? 问题答案: 您应该使用reduce()方法对数组求和,如下所示: Xcode Xcode 10.2+•Swift 5或更高版本 如果您需要使用类型的总和,那么它已经被协议扩展方法所涵盖,因此您只需要实现

  • 问题内容: 我有一个大小为N *M的矩阵,我想找到每一行的平均值。值是从1到5,并且没有任何值的条目设置为0。但是,当我想使用以下方法查找均值时,它给了我错误的均值,因为它还计算了具有值的条目0。 如何获得仅非零值的均值? 问题答案: 获取每一行的非零计数,并将其用于平均每一行的总和。因此,实现看起来像这样- 如果您使用的是较旧版本的NumPy,则可以使用count的float转换来替换,例如,

  • 返回两个或两个以上数字的的平均值。 使用 Array.reduce() 将每个值累加到初始值 0 的累加器, 除以数组长度 length 。 const average = (...nums) => [...nums].reduce((acc, val) => acc + val, 0) / nums.length; average(...[1, 2, 3]); // 2 average(1,

  • 问题内容: 我想要一种计算Java中任意两个整数x,y的方法。如果x + y> Integer.MAX_VALUE或<Integer.MIN_VALUE,那么幼稚的方法就会遇到问题。 番石榴 使用此技术: …但这朝着负无穷大方向舍入,这意味着例程与{-1,-2}之类的天真方式不同(给出-2而不是-1)。 是否有任何相应的例程截断为0? “仅使用”不是我想要的答案,因为我也想要一种适用于长时间输入的