| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 559 人关注过本帖
标题:关于数组的问题(望有经验者给个祥细说明,为什么出错,谢谢 !)
只看楼主 加入收藏
mx250052
Rank: 2
等 级:论坛游民
帖 子:61
专家分:25
注 册:2009-3-1
结帖率:77.78%
收藏
已结贴  问题点数:60 回复次数:5 
关于数组的问题(望有经验者给个祥细说明,为什么出错,谢谢 !)
程序代码:
import *;
public class Scores
{
  public static void main(String[] args)throws IOException
  {
     int max=0;
     int min=100;
     int sum=0;
     System.out.print("请输入学生人数:");
     InputStreamReader reader=new InputStreamReader(System.in);
     BufferedReader input=new BufferedReader(reader);
     String temp=input.readLine();
     //输入学生人数n
     int n=Integer.parseInt(temp);
     int [][]x=new int[n][5];
     //录入成绩
     for(int i=0;i<n;i++)
     {
       for(int j=0;j<5;j++)
       {
         System.out.print((i+1)+"号同学"+(j+1)+"号课程分数:");
         temp=input.readLine();
         x[i][j]=Integer.parseInt(temp);
         
       }
       
     }
     
     //计算并输出每一位同学的课程最高分、最低分和平均分
     for(int i=0;i<n;i++)
     {
        for(int j=0;j<5;j++)
        {
           if(x[i][j]>max)
              max=x[i][j];
           if(x[i][j]<min)
              min=x[i][j];
           sum+=x[i][j];
        }
        System.out.println((i+1)+"号同学的最高分:"+max);
        System.out.println((i+1)+"号同学的最低分:"+min);
        System.out.println((i+1)+"号同学的平均分:"+sum*1.0/5.0);
        
        max=0;
        min=100;
        sum=0;
     }
     //计算并输出每一门课程的班级最高分、最低分和平均分
[code][code]     for(int j=0;j<5;j++)
     {
        for(int i=0;i<n;i++)
        {
           if(x[i][j]>max)
              max=x[i][j];
           if(x[i][j]<min)
              min=x[i][j];
           sum+=x[i][j]; 
        }
        System.out.println((j+1)+"这门课程的最高分:"+max);
        System.out.println((j+1)+"这门课程的最低分:"+min);
        System.out.println((j+1)+"这门课程的平均分:"+sum*1.0/n);
        
        max=0;
        min=100;
        sum=0;
     }
  }
[/code]
     
     




当录入n=2,且成绩录入结束时,输出的没有问题
当我把其中的一部分代码改成了

程序代码:
  for(int j=0;j<5;j++)
     {
        for(int i=0;i<n;i++)
        {
           if(x[j][i]>max)
              max=x[j][i];
           if(x[j][i]<min)
              min=x[j][i];
           sum+=x[j][i]; 
        }
        System.out.println((j+1)+"这门课程的最高分:"+max);
        System.out.println((j+1)+"这门课程的最低分:"+min);
        System.out.println((j+1)+"这门课程的平均分:"+sum*1.0/n);
        
        max=0;
        min=100;
        sum=0;
     }

   
输出从原来的5门成绩(正确的输出)变成了2门成绩的错误输出?这 是怎么一回事啊~望有经验者祥细说明一下好吗?

[ 本帖最后由 mx250052 于 2009-8-6 09:56 编辑 ]
搜索更多相关主题的帖子: 经验 
2009-08-06 09:53
windizual
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:124
专家分:186
注 册:2009-7-1
收藏
得分:20 
.............lz,你的矩阵是咋学的啊,你这输出来的是个2×2矩阵,当然最后只有两门成绩啦
你的行和列完全搞反了,如果还不懂,建议你把图用笔画一下,再按你的程序手动做一下就明白了

Java要学的东西好多~~~~~
2009-08-06 13:48
windizual
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:124
专家分:186
注 册:2009-7-1
收藏
得分:0 
如果你不知道矩阵是怎么回事的,那我建议你把最后段代码中的x[j][i]里面的i和j换下位置

Java要学的东西好多~~~~~
2009-08-06 13:51
usbboy2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:183
注 册:2009-7-31
收藏
得分:20 
i 代表个人计数器  j代表课程计数器
无论你是怎么循环只要上述定义没变,某个人的成绩是x[i][j] 不是 x[j][i]
别被算法搞晕了头!!!
2009-08-06 13:56
ygp_sfec
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:87
专家分:115
注 册:2009-9-8
收藏
得分:0 
数组的行和列的下标是不能互换的,比方说你前面的正确计算是一个2行5列的数组,但是后面错误的计算是一个5行2列的数组,但是你的计算是按列计算的,所以你的输出只有“两门成绩”,如果你的这个程序要是用Fortran等严格定义数组行列的语言编写,在编译时就会出现下标溢出的错误,但是java、c等语言的定义不严格,多维数组在内存中实际上是按照一维数组存放的,所以你把行列互换后,虽然行的下标溢出,依然能够寻址,所以你也能够计算,但是计算出的成绩根本就什么也不是,不知道是什么东西。实际上你写的x[j][i]就是代表x[j*n+i],实际上,在C、java中,向上面的二维数组,你直接采用x[j*n+i]把二维数组当成一维数组来寻址,应该一样会运行(C语言是绝对成立的,java中我没有试过,不过java是对C修正而来,应该也没有问题)。
2009-09-14 23:46
ygp_sfec
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:87
专家分:115
注 册:2009-9-8
收藏
得分:20 
刚刚试了一下,java里x[j*n+i]不能通过编译
2009-09-15 00:05
快速回复:关于数组的问题(望有经验者给个祥细说明,为什么出错,谢谢 !)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040597 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved