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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个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]+" 这里就不会了!!! ");


求教,最后的那个怎么表示

参考技术A 本人也是新手 不过
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+"个数字)");


参考技术B 弄一个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])+”个数字");

本回答被提问者采纳
参考技术C 结构原理上要用关联数组。我试试用了一个简化的结构,没有用散列表。
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);

参考技术D 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];
二维数组 一共两行
第一行 输入的顺序
第二行 排序后的顺序
排序的方法 用的是冒泡排序 和你自己写的排序方法 不一样

Java 数据结构及算法实战系列 017:HJ3 明明的随机数

描述

明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。

数据范围: 1≤n≤1000 ,输入的数字大小满足1≤val≤500

输入描述:第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。

输出描述:输出多行,表示输入数据处理后的结果

解法

此题考查Set结构的用法以及排序。

  • 第一行先输入随机整数的个数 N 。
  • 接下来的 N 行每行输入一个整数,代表明明生成的随机数。
  • 随机数存入Set结构,实现去重。
  • Set结构转为List,并排序。
  • 输出排序后的结果。

/*

* Copyright (c) waylau.com, 2022. All rights reserved.

*/

package com.waylau.nowcoder.exam.oj.huawei;

import java.util.ArrayList;

import java.util.Comparator;

import java.util.HashMap;

import java.util.HashSet;

import java.util.List;

import java.util.Map;

import java.util.Scanner;

import java.util.Set;

/**

* HJ3 明明的随机数. 描述:明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,

* 即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。 数据范围: 1≤n≤1000

* ,输入的数字大小满足1≤val≤500 输入描述:第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。

* 输出描述:输出多行,表示输入数据处理后的结果

*

* @author Way Lau

* @since 2022-08-05

*/

public class HJ3RandomNumbers

public static void main(String[] args)

// 输入一行,代表随机整数的个数 N。

Scanner sc = new Scanner(System.in);

// 全部转为小写

int num = sc.nextInt();

// 构造一个Set结构,实现数字去重

Set<Integer> set = new HashSet<>();

// 对输入数字进行遍历,将每遍历一个数字,就将该字符记录到Set中

for (int i = 0; i < num; i++)

int randomNumer = sc.nextInt();

set.add(randomNumer);

// Set结构转为List,并排序。

List<Integer> sortedNumbers = new ArrayList<Integer>(set);

sortedNumbers.sort(Comparator.naturalOrder());

// 遍历输出每个整数

sortedNumbers.forEach(System.out::println);

// 关闭资源

sc.close();

解法2

去重、排序,这不就是TreeSet的数据结构嘛!因此,可以直接用TreeSet解决。

  • 第一行先输入随机整数的个数 N 。
  • 接下来的 N 行每行输入一个整数,代表明明生成的随机数。
  • 随机数存入TreeSet结构,实现去重、排序。
  • 输出排序后的结果。

代码如下:

/*

* Copyright (c) waylau.com, 2022. All rights reserved.

*/

package com.waylau.nowcoder.exam.oj.huawei;

import java.util.Scanner;

import java.util.TreeSet;

/**

* HJ3 明明的随机数. 描述:明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,

* 即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。 数据范围: 1≤n≤1000

* ,输入的数字大小满足1≤val≤500 输入描述:第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。

* 输出描述:输出多行,表示输入数据处理后的结果

*

@author Way Lau

@since 2022-08-05

*/

public class HJ3RandomNumbers2

public static void main(String[] args)

// 输入一行,代表随机整数的个数 N。

Scanner sc = new Scanner(System.in);

// 全部转为小写

int num = sc.nextInt();

// 构造一个TreeSet结构,实现数字去重、排序

TreeSet<Integer> set = new TreeSet<>();

// 对输入数字进行遍历,将每遍历一个数字,就将该字符记录到Set中

for (int i = 0; i < num; i++)

int randomNumer = sc.nextInt();

set.add(randomNumer);

// 遍历输出每个整数

set.forEach(System.out::println);

// 关闭资源

sc.close();

运行程序,输出如下:

3

2

2

1

1

2

参考引用

以上是关于一个java问题,随机输入一组数字,从小到大排列,然后表示它是第几次输入的数字(问题在这),真心求助。的主要内容,如果未能解决你的问题,请参考以下文章

shell,使用键盘随机输入10个数字,然后执行从小到大的排序。注:不能使用sort

如何在 Java 中生成随机排列?

java如何比较输入的两个数??

随机输入3个正整数,程序出来从小到大排列

STL练习-排列2

VBS产生随机不重复的数字