zoukankan      html  css  js  c++  java
  • java每日一练 2020.7.27

    题目

        创建一个长度可由用户输入的数组,存入10-99不重复的数,要求用户输入在另外一个线程实现,并按升序输出;

    代码

        Thread1类,负责输入
    public class Thread1 implements Runnable {
        @Override
        public void run() {
            Scanner scanner = new Scanner(System.in);
            while (true) {
                Test.num = scanner.nextInt();
                if (Test.num >= 0 && Test.num <= 90) {
                    break;
                } else {
                    System.out.println("您输入的数据有误,请输入0-90之间的数据:");
                    Test.num = scanner.nextInt();
                }
            }
        }
    }
    
        Test类:
    import java.util.Random;
    public class Test {
        static int num = 0;
        public static void main(String[] args) throws InterruptedException {
            System.out.println("请输入数组长度,最大值为90:");
            //创建线程
            Thread1 t = new Thread1();
            Thread t1 = new Thread(t);
            t1.start();
            //等待用户输入正确的元素个数,如果未输入正确的数,则一直休眠主线程,避免主线程继续执行下去导致数组异常
            while(true) {
                if (t1.isAlive())
                    Thread.sleep(100);
                else
                    break;
            }
            //定义数组
            int[] array = new int[Test.num+1];
            //存入数据
            Random random = new Random();
            int temp = 0;
            array[1] = random.nextInt(90) + 10;
            for (int i = 2; i <= Test.num; i++) {
                for (int j = 1; j < i; j++) {
                    //判断随机数是否重复、是否为两位数
                    if (temp == array[j] || temp < 10 || temp > 99) {
                        j = 1;
                        temp = random.nextInt(90) + 10;
                    }
                }
                array[i] = temp;
            }
            System.out.println("排序前的数组元素:");
            for (int i = 1; i <= Test.num; i++) {
                if (i % 10 == 0 || i == Test.num)
                System.out.println(array[i]);
                else
                    System.out.print(array[i] + " ");
            }
            //直接插入法排序
            for (int i = 2 ; i <= Test.num; i++) {
                if (array[i] < array[i-1]){
                    array[0] = array[i];
                    for (int j = i-1 ; array[0] < array[j]; j--) {
                        array[j+1] = array[j];
                        array[j] = array[0];
                    }
                }
            }
            System.out.println("排序后的数组元素:");
            for (int i = 1; i <= Test.num; i++) {
                if (i % 10 == 0)
                    System.out.println(array[i]);
                else
                    System.out.print(array[i] + " ");
            }
        }
    }
    

    结果

        实现这个功能并不需要多线程,只是因为刚刚学习多线程,所以加进去练练手,可忽略。
  • 相关阅读:
    C#如何取硬件标志
    在C#中利用Excel做高级报表
    C#实现网段扫描
    用C#编写一个抓网页的应用程序
    C# 中操作API
    C#串口操作
    C#里的InputBox
    使用C#进行Word 2002和Excel 2002编程
    用C#快速往Excel写数据
    postgres 查看数据库大小
  • 原文地址:https://www.cnblogs.com/yblBlog/p/13387838.html
Copyright © 2011-2022 走看看