java编写第一题:将一个输入位数不确定的正整数按三位分解格式输出 第二题:使用随机的20个正整数

java编写第一题:将一个输入位数不确定的正整数按三位分解格式输出 第二题:使用随机的20个正整数使用随机的20个正整数,且每个数在1000至9999之间。奖这20个数并存放到数组a中。编写方法sort(),该功能是:要求数组按照每个数的后三位的大小进行升序排列。将排列后的前10个数存入数组b中。输出排序后的数组a和数组b!!使用java语言 不要复制的c语言 谢谢!

第1个回答  2018-05-10
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Test {
public static void main(String[] args) throws Exception {
int[] a=new int[20];
for (int i = 0; i < 20; i++) {
a[i]=(int)((Math.random() * 9 + 1) * 1000);
}
int[] b=sort(a);
}
public static int[] sort(int[] arr){
List<Integer> list=new ArrayList<Integer>();
for (int i : arr) {
list.add(i);
}
Collections.sort(list, new Comparator<Integer>() {

@Override
public int compare(Integer o1, Integer o2) {
o1=Integer.parseInt(o1.toString().substring(1));
o2=Integer.parseInt(o2.toString().substring(1));
// TODO Auto-generated method stub
return o1-o2;
}
});
int[] b=new int[10];
for (int i = 0; i < b.length; i++) {
b[i]=list.get(i);
}
return b;
}
}

1.String number=new DecimalFormat("#,###").format(sz);

追问

能再详细点吗

追答

这还不够详细么 粘贴上直接据能用啊

第2个回答  2018-05-10
package com.wenxy.test.baidu.zhidao.bank;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Test {

    // 将num分为k个数保存到result中
    void splitNum(int num, int k, List<Integer> result) {
        if (k > 1) {
            result.add(num % 10);
            splitNum(num / 10, k - 1, result);
        } else {
            result.add(num);
            System.out.print("result: ");
            for (Integer integer : result) {
                System.out.print(integer + "\t");
            }
            System.out.println();
        }
    }

    void sort() {
        int[] a = new int[20];
        Random random = new Random();
        System.out.print("a: ");
        for (int i = 0; i < a.length; i++) {
            a[i] = random.nextInt(8999) + 1000;
            System.out.print(a[i] + "\t");
        }
        System.out.println();

        int[] c = new int[10];
        for (int i = 0; i < c.length; i++) {
            c[i] = a[i] % 1000;
        }

        // sort 使用冒泡排序优化版,没有用collections
        int flag = c.length; // 最后一次交换位置的标识,意味着后面已经有序
        while (flag > 0) {
            int k = flag;
            flag = 0;
            for (int j = 0; j < k - 1; j++) {
                if (c[j] > c[j + 1]) {
                    flag = j + 1;

                    int temp = c[j];
                    c[j] = c[j + 1];
                    c[j + 1] = temp;
                }

            }
        }

        int[] b = new int[10];
        System.out.print("b: ");
        for (int i = 0; i < b.length; i++) {
            b[i] = c[i];
            System.out.print(b[i] + "\t");
        }

    }

    public static void main(String[] args) {
        Test test = new Test();
        test.splitNum(4546, 3, new ArrayList<Integer>());
        test.sort();
    }
}

追问

请问一下 能不能讲解一下算法 就是写一下算法分析 我是java小白 能写流程图最好!谢谢!!谢谢!

追答

算法的话,网上一大堆啊,

搜一下就行了,有很多讲的都不错的

追问

最后一段的splitNum(4546,3,...)这代表啥意思 我换了其他数字好像也可以 这一段为啥要调用main函数 还有 你能把解这道题的思路讲一下吗 谢谢啦!!

追答

main是主函数,就是程序入口,spiltNum是方法啊,看上面怎么实现的,就是思路了

追问

那个while后面的flag为什么=0 还有后面的arraylist 有什么作用吗

追答

等于0说明排序完成了啊,没有产生交换,那个list用来保存数据的吧,数组是固定长度的不易增减

本回答被提问者和网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网