A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币
大家看下这个
---------------------------------------------------------------分割线---------------------------------------------------------------------------
【【【在这里些问题了,代码内容比较多】】】::下面的代码用了两个for语句,而且都是用arr[0]作为参考。这两个arr[0]是独立的吗。如果第一个for语句中arr[0]值改变了,会不会影响第二个?
【【【第一次问答,木有黑马币,大神们见谅!!!】】】
                                                   
       /*只输出数组最值*/
class zuizhi
{
        public static void main(String[] args)
        {
                int [] arr={8,1,2,4,3,7,2,5,0,9,6};
                for (int x=1;x<arr.length;x++)
                {
                        if (arr[0]>arr[x])
                        {
                                int temp=arr[0];
                                arr[0]=arr[x];
                                arr[x]=temp;
                                }
                        }
                System.out.println("max="+arr[0]);
                for (int y=1;y<arr.length;y++)
                {
                        if (arr[0]<arr[y])
                        {
                                int temp2=arr[0];
                                arr[0]=arr[y];
                                arr[y]=temp2;
                                }
                        }
                System.out.println("min="+arr[0]);
                }
        }

最佳答案

查看完整内容

你这段代码的意图首先是想获取最大和最小值,你用了两个循环分别来取,而且打印还把min和max搞反了。下面来分析一下你的代码: 其实获取最大,最小值只需要一轮遍历就足够了,你不需要去修改数组本身的顺序。 思路是你创建两个变量,都赋为a[0]的值,然后遍历数组和两个数相比,保存较大和较小值就可以了。 代码比较简单,我就不敲了,相信你能搞定的。 ...

8 个回复

正序浏览
relice 中级黑马 2014-11-21 02:09:52
8#
是因为eclipse自动生成的.class文件没有找到,我在新建工程时把classes这个文件夹没有放在WEB-INF目录下。
回复 使用道具 举报
这取最大值和最小值怎么还把数组元素给搞乱了……
回复 使用道具 举报
要取得最大最小值还是二楼的方法好,不知道楼主是不是要将数组进行排序
回复 使用道具 举报
学习到了很多东西。。
回复 使用道具 举报
先把数组排序,然后取最大值和最小值打印
  1. public class opp
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                  int [] arr={8,1,2,4,3,7,2,5,0,9,6};
  6.                 sort(arr);          //排序
  7.                 System.out.println("最小值为"+arr[0]);
  8.                 System.out.println("最大值为"+arr[arr.length-1]);

  9.         }
  10.         //选择排序:将数组按从大到小排序
  11.         public static void sort(int[] arr)
  12.     {
  13.             for (int i = 0; i < arr.length-1; i++)
  14.             {
  15.                         for(int j=i+1; j< arr.length;j++)
  16.                         {
  17.                                 if(arr[i]>arr[j])
  18.                                 {
  19.                                         int temp=arr[i];
  20.                                         arr[i]=arr[j];
  21.                                         arr[j]=temp;
  22.                                 }
  23.                         }
  24.                 }
  25.     }

  26. }
复制代码
回复 使用道具 举报
第一个for循环语句里面的if应该是if(arr[0]<arr[x])。找出最大值。
第二个for循环语句里面的if应该是if(arr[0]>arr[y])。找出最小值。
在第一个for结束的时候arr[0]已经是数组里面最大的了。但是不妨碍第二个for循环。

望采纳。
回复 使用道具 举报
你写的有些复杂了
int tempMax = array[0]
int tempMin = array[0]
for int i = 0; i < array.length; i++{
if temp>array[i];
temp = array[i];
if tempmax <array[i];
tempmax = array[i];
}

不明白你为什么要进行交换,但是,你交换后,第二个for循环中a[0]是执行完第一个for后的a[0];
会影响到的
回复 使用道具 举报
本帖最后由 yuanlingqi 于 2014-11-8 11:44 编辑

你这段代码的意图首先是想获取最大和最小值,你用了两个循环分别来取,而且打印还把min和max搞反了。下面来分析一下你的代码:
  1.    int [] arr={8,1,2,4,3,7,2,5,0,9,6};
  2.              //首轮遍历,你采用和首位元素对比互换的方式获得最小值,遍历完成后,数组的值已发生变化
  3.              for (int x=1;x<arr.length;x++)
  4.              {
  5.                  if (arr[0]>arr[x])
  6.                  {
  7.                          int temp=arr[0];
  8.                          arr[0]=arr[x];
  9.                          arr[x]=temp;
  10.                   }
  11.               }
  12.              //这里输出应该是min,下面应该是max
  13.              System.out.println("max="+arr[0]);
  14.              //次轮遍历你对同一个数组,还是采用互换的方式,得到了最大值
  15.              for (int y=1;y<arr.length;y++)
  16.              {
  17.                  if (arr[0]<arr[y])
  18.                  {
  19.                      int temp2=arr[0];
  20.                      arr[0]=arr[y];
  21.                      arr[y]=temp2;
  22.                   }
  23.              }
  24.              System.out.println("min="+arr[0]);
复制代码



其实获取最大,最小值只需要一轮遍历就足够了,你不需要去修改数组本身的顺序。
思路是你创建两个变量,都赋为a[0]的值,然后遍历数组和两个数相比,保存较大和较小值就可以了。
代码比较简单,我就不敲了,相信你能搞定的。



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马