java新手求解,关于ArrayList键盘输入数组问题

刘雁冰 2014-09-11 10:59:35
import java.util.ArrayList;
import java.util.Scanner;

public class Application {
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
ArrayList<Integer>list=new ArrayList<Integer>();
while(m!=0){
list.add(m);
m=sc.nextInt();
}
int a[]=new int[list.size()];
a[m]=list.get(m);
Application qs=new Application();
qs.sort(a,0,a.length-1);
qs.print(a);
}
public void print(int[]a){
for(int i=0;i<a.length;i++){
if(i==a.length-1){
System.out.print(a[i]);
}
else{
System.out.print(a[i]+",");
}
}
}
public void sort(int []a,int left,int right){
int i=left;
int j=right;
if(i>j){
return ;
}
int key=a[left];
while(true){
while(j>i){
if(a[j]<key){
int temp=a[j];
a[j]=a[i];
a[i]=temp;
break;
}
else{
j--;
}
}
while(j>i){
if(a[i]>key){
int temp=a[j];
a[j]=a[i];
a[i]=temp;
break;
}
else{
i++;
}
}
if(j==i){break;}
}
sort(a,left,i-1);
sort(a,i+1,right);
}
}




结果如上,如果自己定义一个int a[]={12,31,34,57,88,45};,不使用ArrayList<Integer>键盘输入数组的话,算法没有问题,但是使用率ArrayList<Integer>键盘输入数组的话,就只能键盘录下第一个数据12.求大神解答
...全文
547 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
姜小白- 2014-09-11
  • 打赏
  • 举报
回复
int a[]=new int[list.size()]; // 创建一个数组,默认值都是0 a[m]=list.get(m); // m 为0 的时候,程序走下来,这时a[m]=list.get(m); 相当于 a[0] = list.get(0); 只给数组第一个元素赋值,其余元素还是0
sinat_19250161 2014-09-11
  • 打赏
  • 举报
回复
引用 6 楼 sinat_19250161 的回复:
a[m]=list.get(m); 总感觉这句有问题,要是输入两次0,那不就乱了吗?
应该说 是两个同样的数字,要知道list 是允许重复的
sinat_19250161 2014-09-11
  • 打赏
  • 举报
回复
a[m]=list.get(m); 总感觉这句有问题,要是输入两次0,那不就乱了吗?
姜小白- 2014-09-11
  • 打赏
  • 举报
回复
int a[]=new int[list.size()]; a[m]=list.get(m); 改为

int a[] = new int[list.size()];
for (int i =0; i<list.size();i++) {
	a[i] = list.get(i); 
 }
试试看
-江沐风- 2014-09-11
  • 打赏
  • 举报
回复
修改时需注意list.size()的值;
ArrayList<Integer> list = new ArrayList<Integer>();
System.out.println(list.size());
刘雁冰 2014-09-11
  • 打赏
  • 举报
回复
引用 楼主 lu_ckid 的回复:
import java.util.ArrayList;
import java.util.Scanner;

public class Application {
	public static void main(String args[]){
		Scanner sc=new Scanner(System.in);
		int m=sc.nextInt();
		ArrayList<Integer>list=new ArrayList<Integer>();
		while(m!=0){
			list.add(m);
			m=sc.nextInt();
		}
		int a[]=new int[list.size()];
		a[m]=list.get(m);
		Application qs=new Application();
		qs.sort(a,0,a.length-1);
		qs.print(a);
	}
	public void print(int[]a){
		for(int i=0;i<a.length;i++){
			if(i==a.length-1){
				System.out.print(a[i]);
			}
			else{
				System.out.print(a[i]+",");
			}
		}
	}
	public void sort(int []a,int left,int right){
		int i=left;
		int j=right;
		if(i>j){
			return ;
		}
		int key=a[left];
		while(true){
			while(j>i){
				if(a[j]<key){
					int temp=a[j];
					a[j]=a[i];
					a[i]=temp;
					break;
				}
				else{
					j--;
				}
			}
			while(j>i){
				if(a[i]>key){
					int temp=a[j];
					a[j]=a[i];
					a[i]=temp;
					break;
				}
				else{
					i++;
				}
			}
			if(j==i){break;}
		}
		sort(a,left,i-1);
		sort(a,i+1,right);
	}
}
结果如上,如果自己定义一个int a[]={12,31,34,57,88,45};,不使用ArrayList<Integer>键盘输入数组的话,算法没有问题,但是使用率ArrayList<Integer>键盘输入数组的话,就只能键盘录下第一个数据12.求大神解答
能修改吗
-江沐风- 2014-09-11
  • 打赏
  • 举报
回复
a[m]=list.get(m); 此时m的值为0,即只给a[0]赋值了;

62,615

社区成员

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

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