一个java问题,随机输入一组数字,从小到大排列,然后表示它是第几次输入的数字(问题在这),真心求助。

要输入几个数?8
第1个数字: 4
第2个数字: 3
第3个数字: 2
第4个数字: 1
第5个数字: 8
第6个数字: 7
第7个数字: 6
第8个数字: 5

第1个数字: 1(原来的第4个数字)
第2个数字: 2(原来的第3个数字)
第3个数字: 3(原来的第2个数字)
第4个数字: 4(原来的第1个数字)
第5个数字: 5(原来的第8个数字)
第6个数字: 6(原来的第7个数字)
第7个数字: 7(原来的第6个数字)
第8个数字: 8(原来的第5个数字)
import java.util.Scanner;

class ArrayDemo04 {
public static void main(String args[]) {
int item[] = new int[100];
int a, b, t;
int count;

Scanner sc = new Scanner(System.in);
System.out.print("要输入几个数? ");
count=sc.nextInt();
for(a=0; a<count; a++) {
System.out.print("第"+(a+1)+"个数字:")
item[a]=sc.nextInt();
}

for(a=1; a<count; ++a)
for(b=count-1; b>=a; --b){

if(item[b-1] > item[b]){

t = item[b-1];
item[b-1] = item[b];
item[b] = t;
}
}

for(t=0; t<count; t++)System.out.print(第"+(t+1)+"个数字:"+item[t]+" 这里就不会了!!! ");
}
}
求教,最后的那个怎么表示

第1个回答  2011-12-20
本人也是新手 不过
Map是不能直接调用工具类进行排序的 而且Map类里的泛型不能用int ,
int是基本数据类型 需要用它的包装类Integer
List可以用Collections.sort( ); 排序
之前写了一次不太对 这次完全按照你的要求输出了

package day01;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class Test02 {
private static final ArrayList Entry = null;

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("要输入几个数字?");
int num=sc.nextInt();
Map<Integer,Integer> map=new HashMap<Integer, Integer>();
for(int i=1;i<=num;i++){

System.out.println("第"+i+"个数字:");
int value=sc.nextInt();
map.put(i,value );
}
//将map转换成list
Set<Entry<Integer,Integer>> set=map.entrySet();
List<Entry<Integer,Integer>> list=new ArrayList<Entry<Integer,Integer>>(set);
//排序
Collections.sort(list,
new Comparator<Entry<Integer,Integer>>(){

public int compare(
Entry<Integer, Integer> o1,
Entry<Integer, Integer> o2) {
return o1.getValue()-o2.getValue();
}});
int j=1;
for(Iterator<Entry<Integer,Integer>> i=list.iterator();i.hasNext();){
Entry<Integer,Integer> entry=i.next();
int key=entry.getKey();
int value=entry.getValue();

System.out.println("第"+ j++ +"个数字:"+value+"(原来的第"+key+"个数字)");
}
}
}
第2个回答  2011-12-16
弄一个Map集合就可以了,把第一个输入的数字当做key,1当做value。依次类推。
然后将key进行排序,然后依次用key获取value。追问

这么快啊,谢谢了,不过我还是不懂。初学者阿

追答

Map集合是用键值对来进行存储的集合(key-value),Map自身提供方法通过key的值来找value。
Map就是声明了一个Map集合,其中的key的类型为int(第一个int),value的类型为int(第二个int)。同时将key保存在一个list集合中,将其排序。
输出的时候可以用list[0](排序后第一个元素),map.get(list[0])(get(key)则是通过key值来找value)。

追问

您看看我补充的问题,那个怎么解决

追答

Scanner sc = new Scanner(System.in);
Map map = new Map();
System.out.print("要输入几个数? ");
count=sc.nextInt();
for(a=0; a<count; a++) {
System.out.print("第"+(a+1)+"个数字:")
item[a]=sc.nextInt();
map.put(item[a],(a+1));
}
........
System.out.print(第"+(t+1)+"个数字:"+item[t]+"原来的第“+map.get(item[t])+”个数字");

本回答被提问者采纳
第3个回答  2011-12-16
结构原理上要用关联数组。我试试用了一个简化的结构,没有用散列表。
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.print("要输入几个数?");
int num=s.nextInt();
final Integer a[]=new Integer[num];
Integer b[]=new Integer[num];
for(int i=0;i<num;i++){
System.out.format("第%d个数字: ",i+1);
a[i]=s.nextInt();
b[i]=i;
}
Arrays.sort(b,new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
return a[i1]-a[i2];
}
});
Arrays.sort(a);
for(int i=0;i<num;i++)
System.out.format("第%d个数字: %d(原第%d个数字)\n",i+1,a[i],b[i]+1);
}
}
============
要输入几个数?4
第1个数字: 5
第2个数字: 7
第3个数字: 6
第4个数字: 9
第1个数字: 5(原第1个数字)
第2个数字: 6(原第3个数字)
第3个数字: 7(原第2个数字)
第4个数字: 9(原第4个数字)
====

用散列表,代码能到最简:
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.print("要输入几个数?");
int num=s.nextInt();
Hashtable<Integer,Integer> t=new Hashtable<Integer, Integer>();
int a[]=new int[num];
for(int i=0;i<num;i++){
System.out.format("第%d个数字: ",i+1);
a[i]=s.nextInt();
t.put(a[i], i);
}
Arrays.sort(a);
for(int i=0;i<num;i++)
System.out.format("第%d个数字: %d(原第%d个数字)\n",i+1,a[i],t.get(a[i])+1);
}
}
第4个回答  2011-12-16
public class RandSort{

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

int number = 0;

int index = 0;

int[] numberArr1, numberArr2;

System.out.println("input a number:");

try {
number = Integer.parseInt(scanner.nextLine());
} catch (NumberFormatException e) {
System.out.println("input error.");
}

numberArr1 = new int[number];

numberArr2 = new int[number];
while(number > 0) {
numberArr1[index] = Integer.parseInt(scanner.nextLine());
numberArr2[index] = numberArr1[index];
index ++;
number --;
}

for (int i = 0; i < numberArr1.length; i++) {
System.out.println("第" + (i + 1) + "个:" + numberArr1[i]);
}
System.out.println("");

Arrays.sort(numberArr1);

for (int sortAfter : numberArr1) {
System.out.print(sortAfter);
for (int i = 0 ; i < numberArr2.length; i++) {
if (sortAfter == numberArr2[i]) {
System.out.print("(第"+ (i + 1) +"个)");
}
}
System.out.println("");
}
}
}

希望对 你有所帮助
第5个回答  2011-12-16
bug 好多的程序啊 其实 这个用二维数组就能解决
int[][] arr=new int[输入的次数][2];
二维数组 一共两行
第一行 输入的顺序
第二行 排序后的顺序
排序的方法 用的是冒泡排序 和你自己写的排序方法 不一样
相似回答