首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于数组元素变换的有关问题探讨

2013-03-19 
【求助】关于数组元素变换的问题探讨本帖最后由 quickily 于 2013-03-18 16:57:30 编辑题目:输入数组,最大的

【求助】关于数组元素变换的问题探讨
本帖最后由 quickily 于 2013-03-18 16:57:30 编辑 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
思路:未完成,程序有问题。Exer35.javaExer35_3.java
1、输入一个数组,以-1做为结束标志。
2、在数组内部做循环判断,最大的一位标识为Max,最小的一位标识为Min,并得到最大元素的排位数。
3、最大的与第一个元素交换,输出得到数组
4、在新数组内部做循环判断,得到最小元素的排位数。
5、最小的与最后一个元素交换。

在解决这个问题时 ,遇到了困难,当最大值和最小值在首尾时,或者在最大值和首位调换。,或者最小值和尾位调换,把位置弄混。
求帮忙看下,如何才能确认准确无误。
设计的测试用例如下:
说明                                     测试数据                预期结果实际结果
首位为最大值,末位为最小值              9、3、7、5、1        9、3、7、5、1
首位为最小值,末位为最大值              1、3、7、5、9        9、3、7、5、1
首位为最大值,最小值位于中间              9、3、1、7、5        9、3、5、7、1
首位为最小值,最大值位于中间              1、3、9、7、5        9、3、5、7、1
末位为最大值,最小值位于中间              3、1、7、5、9        9、3、7、5、1
末位为最小值,最大值位于中间              3、9、7、5、1        9、3、7、5、1
首末均非最大、最小值。最小值位于最大值左边。  3、1、9、7、5        9、5、3、7、1
首末均非最大、最小值。最大值位于最小值左边。  3、9、1、7、5        9、3、5、7、1
源码如下:

import java.util.*;
public class Exer35_4  
{
public static void main(String[] args) 
{
int i,j;
int k = 0;//标识输入数组的元素个数
int numMax = 0;
int numMin = 0;
int idx1 = 0;//初始最大元素的排位数
int idx2 = 0;//初始最小元素的排位数
int temp = 0;
int t = 0;
int[] a = new int[20];////定义所能输入的最大数组
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个元素个数不大于20的数组,以-1做为输入结束标志:");
for (i = 0; i <= 20; i++)//得到输入数组的元素值,以及个数。
{
a[i] = sc.nextInt();
if (a[i] == -1)
{
break;
}
k = i + 1;
}
System.out.print("输入的数组元素个数为:" + k + ",数组元素分别为:");
for (j = 0; j < k; j++)
{
System.out.print(a[j] + " ");
}
numMax = a[0];
numMin = a[k-1];
for (j = 0; j < k; j++)
{
if (a[j] > numMax)
{
numMax = a[j];
idx1 = j;
}
}
idx2 = k -1;
for (j = 0; j < k; j++)//若最小值为最后一位,则idx2 为初始值,即为0,需考虑此情况。
{
if (a[j] < numMin)
{
numMin = a[j];
idx2 = j;
}
}
System.out.println();
System.out.print("最大的元素为:" + a[idx1]);
System.out.print(",最小的元素为:" + a[idx2]);
System.out.println();
System.out.println("最大元素的下标为:" + idx1 + ",最小元素的下标为:" + idx2);


if (idx1 != 0)
{
temp = a[0];
a[0] = a[idx1];
a[idx1] = temp;
}
System.out.println("调换最大值后的数组顺序为:");
for (j = 0; j < k; j++)
{
System.out.print("a[" + j + "] = " + " " + a[j] + " ");
}
if (idx2 != k - 1)
{
t = a[k-1];
a[k-1] = a[idx2];
a[idx2] = t;
}
System.out.println();
for (j = 0; j < k; j++)
{
System.out.print("a[" + j + "] = " + " " + a[j] + " ");
}
System.out.print("\n调整后得到的最终数组为:");
for (j = 0; j < k; j++)
{
System.out.print(a[j] + " ");
}
}
}

java
[解决办法]
你将最大值和a[idx1]交换后,a[idx2]的值可能就不是最小值了,所以要在最大值交换完后,再找最小值。
话说你的程序不能连续输入啊。。。
import java.util.*;
public class Exer35_4  
{
    public static void main(String[] args) 
    {
        int i,j;
        int k = 0;            //标识输入数组的元素个数
        int numMax = 0;        
        int numMin = 0;
        int idx1 = 0;        //初始最大元素的排位数
        int idx2 = 0;        //初始最小元素的排位数
        int temp = 0;
        int t = 0;
        int[] a = new int[20];            ////定义所能输入的最大数组
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个元素个数不大于20的数组,以-1做为输入结束标志:");
        for (i = 0; i <= 20; i++)        //得到输入数组的元素值,以及个数。
        {
            a[i] = sc.nextInt();        
            if (a[i] == -1)
            {
                break;
            }
            k = i + 1;
        }
        System.out.print("输入的数组元素个数为:" + k + ",数组元素分别为:");
        for (j = 0; j < k; j++)
        {


            System.out.print(a[j] + " ");
        }
//将最大的放在a[0]
        numMax = a[0];
        for (j = 0; j < k; j++)                
        {
            if (a[j] > numMax)
            {
                numMax = a[j];
                idx1 = j;
            }
        }
        System.out.println();
        System.out.print("最大的元素为:" + a[idx1]);
if (idx1 != 0)
        {
            temp = a[0];
            a[0] = a[idx1];
            a[idx1] = temp;
        }
        System.out.println("调换最大值后的数组顺序为:");
        for (j = 0; j < k; j++)
        {
            System.out.print("a[" + j + "] = " + " " + a[j] + " ");
        }
System.out.println();
//jianng
numMin = a[k-1];
idx2 = k -1;
        for (j = 0; j < k; j++)                //若最小值为最后一位,则idx2 为初始值,即为0,需考虑此情况。
        {
            if (a[j] < numMin)
            {
                numMin = a[j];
                idx2 = j;
            }
        }
        if (idx2 != k - 1)
        {
            t = a[k-1];
            a[k-1] = a[idx2];
            a[idx2] = t;
        }
System.out.print(",最小的元素为:" + a[idx2]);
        System.out.println();

        for (j = 0; j < k; j++)
        {


            System.out.print("a[" + j + "] = " + " " + a[j] + " ");
        }
        System.out.print("\n调整后得到的最终数组为:");
        for (j = 0; j < k; j++)
        {
            System.out.print(a[j] + " ");
        }
    }
}

热点排行