【问题标题】:How do I print the array contents for a random insertion sort along with the words before the random number?如何打印随机插入排序的数组内容以及随机数之前的单词?
【发布时间】:2021-03-21 08:34:11
【问题描述】:

此代码排序并打印出我想要的随机数。我缺少的是数字之前的单词。我是Java新手,但更精通Python。我希望打印出来的每个随机数都说明以下内容:

结果[0] = _

结果[1] = _

结果[2] = _

结果[3] = _

无需将它们一一放入代码中。 在 Python 中,代码如下,将全部打印出来。

print(“result[“,I,”] =“, result[I])

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter Size of Random Number");
        int n = input.nextInt(); 
        Random random = new Random(); 
        int[] result = random.ints(n, -n, n).toArray();
        
        Arrays.stream(result).forEach(System.out::println);
        System.out.println("\n");
        
       
        int len = result.length;
        System.out.println("Insertion Sort");
        for(int i=1; i<len; i++){
            int j;
            int key = result[i];
            for (j=i-1; (j >= 0 && result[j] > key); j--) { 
                result[j + 1] = result[j]; 
                result[j+1] = key;
                for( i = 0; i < len; i++){
                    System.out.println("result[" + (i) + "] =" );
                    Arrays.stream(result).forEach(System.out::println);
                    System.out.println("\n");
                }  
            } 
            
        }
    }

【问题讨论】:

    标签: java arrays sorting insertion-sort


    【解决方案1】:

    问题是您已将 print 语句放在嵌套循环中。此外,您正在嵌套循环的每次迭代中打印整个数组。只需将其取出并在一次迭代中仅打印一个元素。

    import java.util.Arrays;
    import java.util.Random;
    import java.util.Scanner;
    
    class Main {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            System.out.print("Enter Size of Random Number: ");
            int n = input.nextInt();
            Random random = new Random();
            int[] result = random.ints(n, -n, n).toArray();
    
            Arrays.stream(result).forEach(System.out::println);
            System.out.println("\n");
    
            // Insertion sort
            int len = result.length;
            for (int i = 1; i < len; ++i) {
                int key = result[i];
                int j = i - 1;
                while (j >= 0 && result[j] > key) {
                    result[j + 1] = result[j];
                    j = j - 1;
                }
                result[j + 1] = key;
            }
    
            System.out.println("After sorting: ");
            for (int i = 0; i < len; i++) {
                System.out.println("result[" + (i) + "] =" + result[i]);
            }
        }
    }
    

    示例运行:

    Enter Size of Random Number: 5
    0
    -5
    -3
    2
    1
    
    
    After sorting: 
    result[0] =-5
    result[1] =-3
    result[2] =0
    result[3] =1
    result[4] =2
    

    注意:我还更正了您的排序逻辑。互联网上有数百个教程可用于了解插入排序,例如你可以查看this one

    【讨论】:

    • 谢谢。如果我要将它从最大更改为最小,我需要更改什么?
    • 不客气。对于降序,只需将条件更改为result[j] &lt; key,保持其他所有内容不变。如有任何其他疑问,请随时发表评论。
    【解决方案2】:

    这是你要找的吗?

    for(i = 0; i < result.len; i++){
        System.out.println("result[" + i + "] = " + result[i]);
    }  
    

    【讨论】:

    • 有没有办法可以更改它,以便它可以使用插入进行排序。这不一定要进行任何排序。我是否需要将 system.out.println 放在进行排序的 for 循环中?
    • 是的,如果你想打印出每次迭代的结果,最里面的for循环必须用这个for循环替换。
    【解决方案3】:

    您只需要替换这一行:System.out.println("result[" + (i) + "] =" );

    对于这一行:System.out.println("result[" + (i) + "] =" + result[i]);

    或者你可以使用String.format:

    System.out.println(String.format("result[%d] = %s", i, result[i]));

    您还必须删除其他两行:

    // here you are printing again all the numbers so is not necessary
    Arrays.stream(result).forEach(System.out::println); 
    
    // here you are adding another linebreak, but using println add the linebreak automatically
    System.out.println("\n");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2011-12-08
      • 2011-06-03
      • 1970-01-01
      • 2021-02-15
      相关资源
      最近更新 更多