题目为:有一组乱序的字母{e,v,c,a, u,‘ ’},将它们按升序排列。
要增加一个新的字母,将它插入字母序列,并保持升序。
注意:题意原意为数组{e,v,c,a,u}中原本就存在一个位置等待新加入的字母放入
在最开始选择从键盘输入一个字母,由于String类型无法转换为比它低一级的char类型,所以在键盘输入一个字母时,运用到了charAt()函数进行转换:
System.out.println("请输入一个新的字母");
char nNum = input.next().charAt(0);
乱序数组定义后按照要求先进行排序:
char[] num ={'e','v','c','a','u',' '};
Arrays.sort(num);
在输入新字母进行插入时,本渣进行了一系列的分段式分析
分别分为三段:1 输入的字母为最小值;2输入的字母为中间值;3输入的字母为最大值时:
(代码被我写的乱七八糟,一塌糊涂,复杂度高)
System.out.println("请输入一个新的字母");
char nNum = input.next().charAt(0);
// System.out.print(nNum);//输出字母的值
if(nNum<num[1]){
// System.out.println("test0");
num[0]=nNum;
for (int i = 0; i <num.length; i++) {
System.out.println("插入后:");
System.out.print(num[i]+" ");
}
}else{
for (int i = 2; i < num.length; i++) {
if(nNum<num[i]){
for (int j = 0; j <i-1 ; j++) {
num[j]=num[j+1];
}
num[i-1]=nNum;
// System.out.println("test1");
break;
}
else if(nNum>num[num.length-1]){
for (int j = 0; j <num.length-1; j++) {
num[j]=num[j+1];
}
num[num.length-1]=nNum;
// System.out.println("test2");
break;
}
}
这真的是本着先把问题解决再进行优化的考虑,得出以上结果。
而在多次优化,以及询问大神哥哥之后,优化后的代码如下:
int temp=-1;//在初始化时定义一个临时对象保存下标值
System.out.println("请输入一个新的字母");
char nNum = input.next().charAt(0);
// System.out.print(nNum);//输出字母的值
for (int i =0; i <num.length-1 ; i++) {
if(nNum>num[i+1]){
num[i]=num[i+1];
temp = i;
}
}num[temp+1]=nNum;
优化后真的简单太多有没有!所以真的很神奇很厉害啊~