【求助】关于数组元素变换的问题探讨

quickily 2013-03-18 04:55:59
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
思路: 未完成,程序有问题。Exer35.java Exer35_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] + " ");
}
}
}
...全文
199 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
quickily 2013-03-19
  • 打赏
  • 举报
回复
for (i = 0; i <= 20; i++) //得到输入数组的元素值,以及个数。 { a[i] = sc.nextInt(); if (a[i] == -1) { break; } k = i + 1; } 此处实现了连续输入。
Karl_jiang 2013-03-19
  • 打赏
  • 举报
回复
你将最大值和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] + " ");
        }
    }
}
quickily 2013-03-19
  • 打赏
  • 举报
回复
有哪位指点下?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧