java编程,从键盘录入10个整数数据,将每次录入的数据按从小到大的顺序插入到数组中。

//从键盘录入10个整数数据,将每次录入的数据按从小到大的顺序插入到数组中
//程序编译出现了“使用了未经检查或不安全的操作”,如何解决??????
//提示我使用-Xlint:unchecked,提示是:程序的所有add()方法出现问题????你最好调试一下
import java.util.*;
public class TestArrayList{
public void changeL(ArrayList aL,int b){
Integer x=new Integer(b);
if(aL.size()>1)//数据个数大于2的情况
{
Integer h1=(Integer)aL.get(0),h2=(Integer)aL.get(aL.size()-1);//用到强制类型转换,请问有什么改进办法????
if(b>=h1.intValue()&&b<=h2.intValue())
{
for(int i=0;i<aL.size();i++){
Integer h3=(Integer)aL.get(i),h4=(Integer)aL.get(i+1);//用到强制类型转换,请问有什么改进办法?
if(b>=h3.intValue()&&b<=h4.intValue())
{aL.add(i+1,x);break;}
}
}
else{
if(b>h2)
aL.add(x);
else
aL.add(0,x);
}
}
else if(aL.size()==0)//数据个数为0的情况
aL.add(x);
else//数据个数为1的情况
{
Integer h5=(Integer)aL.get(0);//用到强制类型转换,请问有什么改进办法?
if(b<=h5.intValue())
aL.add(0,x);
else
aL.add(x);
}
}

public static void main(String [] args){
TestArrayList testA=new TestArrayList();//创建一个自定义类
ArrayList aLi=new ArrayList();//定义ArrayList类
int a;
Scanner scanner=new Scanner(System.in);
for(int i=0;i<10;i++)
{
System.out.println("输入数据前size大小"+aLi.size());
System.out.print("输入第"+(i+1)+"整数:");
a=scanner.nextInt();
testA.changeL(aLi,a);
}
System.out.println("输出整个数列:");
for(int i=0;i<aLi.size();i++)
System.out.print(aLi.get(i)+"\t");
}
}

1、请解决程序中我注释的问题,有问号的就是问题!
2、如果你有更好的方法请写出来!

楼主你好,先说一下我对这道题目的认识吧。
1、输入10个数,一次按顺序插入。核心考察的应该是2点
1) 给定一个数组和一个整数n,找到这个数应该插入的位置。
2) 插入这个数,其实就是从这个位置往后的所有元素后移一位即可。

2、你的代码用的java的集合。我想这道题目的初衷是考察是1中的2点。如果用集合list等元素的话。那么就失去了数组移动这个知识点的考察。

3、我是用数组实现的。集合应该更简单。

【执行效果,考虑了插入时候的大小问题】
请输入第1个整数
5
第1轮数组情况如下:
5 0 0 0 0 0 0 0 0 0
请输入第2个整数
1
位置0
第2轮数组情况如下:
1 5 0 0 0 0 0 0 0 0
请输入第3个整数
3
位置1
第3轮数组情况如下:
1 3 5 0 0 0 0 0 0 0
请输入第4个整数
8
位置3
第4轮数组情况如下:
1 3 5 8 0 0 0 0 0 0
请输入第5个整数
9
位置4
第5轮数组情况如下:
1 3 5 8 9 0 0 0 0 0
请输入第6个整数
2
位置1
第6轮数组情况如下:
1 2 3 5 8 9 0 0 0 0
请输入第7个整数
24
位置6
第7轮数组情况如下:
1 2 3 5 8 9 24 0 0 0
请输入第8个整数
18
位置6
第8轮数组情况如下:
1 2 3 5 8 9 18 24 0 0
请输入第9个整数
20
位置7
第9轮数组情况如下:
1 2 3 5 8 9 18 20 24 0
请输入第10个整数
25
位置9
第10轮数组情况如下:
1 2 3 5 8 9 18 20 24 25

【源代码】
import java.util.Scanner;

public class ZhuLei
{
//思路:定义一个程度为10的整型数组。一次录入10个整数。
//每个整数,找到自己该插入的位置,然后后面的元素全部后移即可。
public static void main(String[] args)
{
int[] a=new int[10];
int count=1;
Scanner scan=new Scanner(System.in);

while(count<=10)
{
System.out.println("请输入第"+count+"个整数");
int x=scan.nextInt();//获取一个整数
if(count==1)//第一个数直接放在a【0】上
{
a[0]=x;
}
else
{
int insertpos=getPos(a,x,count);
System.out.println("位置"+insertpos);
//移动元素
moveArray(a,insertpos);
a[insertpos]=x;
}
System.out.println("第"+count+"轮数组情况如下:");
printArray(a);

count++;
}

}

//给定一个数组和一个数,找出这个数该放的位置
public static int getPos(int[] a,int n,int count)
{
int pos=-1;
int i=0;
for(i=0;i<count;i++)
{
if(n<=a[i])//一旦发现那个元素比我这个大,那么就找到该插入的位置了。
{
pos=i;
break;
}
}
if(i==count)//如果是count轮,且是目前最大的数,肯定就是在这个位置了,但数组是count-1。
{
pos=count-1;
}
return pos;
}

//给定一个数组和一个下标,从下标开始所有元素后移动1位
public static void moveArray(int[] a,int pos)
{
for(int i=a.length-1;i>pos;i--)
{
a[i]=a[i-1];
}
}

//给定一个数组,打印每个元素
public static void printArray(int [] a)
{
for(int k:a)
{
System.out.print(k+" ");
}
System.out.println();
}

}

【思路说明】
1、定义一个10个数组的元素。
2、用一个循环,来实现10次输入10个整数(没考虑容错,即不是整数的情况)
3、每次输入一个数X。
如果是第一个,就直接赋值给a【0】
否则:
调用下面的一个一个函数,返回这个数该插入的位置
然后移动元素
最后把输入的这个数X复制到数组的这个空位置。即可
4、函数说明:
4.1 getPos()函数,第几轮,就看前几个,哪一个比这个X大,那么就停止,这个地方就是它该插入的地方,count全部看完,肯定是X目前最大,插入到count-1即可
4.2 moveArray(),这个简单,从后往前把元素后移一位,知道该插入的那个位置。
4.3 printArray(),打印数组,这样可以每次看看效果

【你第代码】
你的思路我没有时间看,但是警告就是List<Integer>。
他的意思是,list好比一个口袋,但是只能装整数。这个问题不大。

好运!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-05
public class Test {

public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
Scanner input = new Scanner(System.in);
for (int i = 0; i < 10; i++) {
System.out.print("第" + (i + 1) + "个数:");
list.add(input.nextInt());
}
Collections.sort(list);
for (Integer item : list) {
System.out.print(item + " ");
}
}
}

这样写就可以了

追问

首先谢谢你,肯定你花了时间,但是我的要求是输入一个就插入一次,不是输入完了才去排序。那就是直接调用了。相似的问题我看到过。我是初学者,注重过程,结果虽然一样。

如果有类似回答请绕道!!!
主要解决下我提的问题!3q

追答

你这样的话把你arraylist换成List就可以了,就不会出现强制类型转换了

本回答被网友采纳
相似回答