我正在尝试解决此代码遇到的两个问题。首先,我想将我的整数输入设置为最大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])+ " ");
}
}
}
答案 0 :(得分:0)
我有一些建议(大多是次要的)和可能的解决方案:
代码样式很重要!使用appropriate indentation and spacing。
不要在函数顶部声明一堆索引变量。这对于C89很好,但是在Java中不是必需的。将变量保持在尽可能小的范围内可以防止错误。
在您的排序例程中使用Math.abs()
而不是打印代码,以获得所需的结果。
当您不确定长度提前时,请考虑使用ArrayList而不是原始数组。另一种合理的方法是在填充后复制阵列以消除未使用的尾部。否则,arr.length
是不准确的,您将不得不依赖于随附的长度变量,该变量以后可能会导致错误。
考虑使用函数对代码进行模块化,尤其是对于明显可重用和模块化的组件(例如排序)。
考虑使用除冒泡排序之外的其他方法,尽管这种方法适用于诸如此类的教学示例,但效率不高。像Arrays.sort()
这样的内置排序库是工业实力方法。
for (n=0, n < 100, n++)
是语法错误。使用;
来分隔for
。该行还覆盖了您刚从用户处收集的n
值,为0。使用i
在此处计数,或执行n--
直到n == 0
重复n
次
如果最多允许使用99个整数,请使用长度为99而不是50的数组,以便可以保存所有内容。
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。