用户输入的Int值的冒泡排序数组

时间:2018-08-12 21:40:53

标签: java arrays multidimensional-array bubble-sort

我正在尝试解决此代码遇到的两个问题。首先,我想将我的整数输入设置为最大100,然后我尝试获取输入的整数数组,并按绝对值对它们进行排序。因此,如果用户使用此程序,我希望他们只能输入99来表示他们希望排序的整数数。当它最终排序而不是降序或升序时,我希望它像这样; -1,2,-6,10,-20。

 public static void main(String args[])
{
   int n, i, j, temp;
   int arr[] = new int[50];
   Scanner scan = new Scanner(System.in);

   //Input area for user data, setting the number of integers to sort
   System.out.print("Enter Total Number of Integers you would like to sort : ");
   n = scan.nextInt();

   for (n=0, n < 100, n++)

   {
   }

   //Input area for user data, asking user to input the ints into an array for sorting
   System.out.print("Enter " +n+ " Numbers : ");
   for(i=0; i<n; i++)
   {
       arr[i] = scan.nextInt();
   }

   // Sorting Array using Bubble Sort Technique
   for(i=0; i<(n-1); i++)
   {
       for(j=0; j<(n-i-1); j++)
       {
           if(arr[j] > arr[j+1])
           {
               temp = arr[j];
               arr[j] = arr[j+1];
               arr[j+1] = temp;
           }
       }
   }

   // Command line output from user, sorted by absolute value      
   System.out.print("Sorted List : \n");
   for(i=0; i<n; i++)
   {
       System.out.print(java.lang.Math.abs(arr[i])+ "  ");
   }
 }
}

1 个答案:

答案 0 :(得分:0)

我有一些建议(大多是次要的)和可能的解决方案:

  1. 代码样式很重要!使用appropriate indentation and spacing

  2. 不要在函数顶部声明一堆索引变量。这对于C89很好,但是在Java中不是必需的。将变量保持在尽可能小的范围内可以防止错误。

  3. 在您的排序例程中使用Math.abs()而不是打印代码,以获得所需的结果。

  4. 当您不确定长度提前时,请考虑使用ArrayList而不是原始数组。另一种合理的方法是在填充后复制阵列以消除未使用的尾部。否则,arr.length是不准确的,您将不得不依赖于随附的长度变量,该变量以后可能会导致错误。

  5. 考虑使用函数对代码进行模块化,尤其是对于明显可重用和模块化的组件(例如排序)。

  6. 考虑使用除冒泡排序之外的其他方法,尽管这种方法适用于诸如此类的教学示例,但效率不高。像Arrays.sort()这样的内置排序库是工业实力方法。

  7. for (n=0, n < 100, n++)是语法错误。使用;来分隔for。该行还覆盖了您刚从用户处收集的n值,为0。使用i在此处计数,或执行n--直到n == 0重复n

  8. 如果最多允许使用99个整数,请使用长度为99而不是50的数组,以便可以保存所有内容。

  9. 如果用户输入非整数,
  10. nextInt()将崩溃。调查error handling来处理此类情况。

以下是一些代码:

import static java.lang.System.out;
import java.util.*;

class Main {
    public static void main(String args[]) {
        int arr[] = new int[99];
        Scanner scan = new Scanner(System.in);

        out.print("Enter total number of integers you would like to sort: ");
        int n = scan.nextInt();

        while (n < 1 || n > 99) {
            out.print("Please enter a number between 1 and 99: ");
            n = scan.nextInt();
        }

        for (int i = 0; i < n; i++) {
            out.print("Input a number less than 100: ");
            arr[i] = scan.nextInt();

            if (arr[i] > 100) { 
                out.println("That number was over 100. Try again.");
                i--; 
            }
        }

        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (Math.abs(arr[j]) > Math.abs(arr[j + 1])) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }

        out.println("Sorted List :");

        for (int i = 0; i < n; i++) {
            out.print(arr[i] + "  ");
        }
    }
}

样品运行

Enter total number of integers you would like to sort:  6
Input a number less than 100:  1
Input a number less than 100:  -9
Input a number less than 100:  3
Input a number less than 100:  4
Input a number less than 100:  -5
Input a number less than 100:  6
Sorted List : 
1  3  4  -5  6  -9 

还有一个repl