0

问题是 :

一个程序提示用户输入一个包含六个正整数的列表,然后声明一个包含六个元素的数组。程序应该按升序对列表的元素进行排序。此外,程序应该同时显示原始列表和排序列表。

我的代码是:

import java.util.*;

public class q2 {
    static Scanner scan = new Scanner (System.in);
    public static void main (String[] args ) {
     int i;
int [] fList = new int [6];
int [] sList = new int [6];

 System.out.println ("Enter 6 positive integers :");

 for ( i=0 ; i<fList.length ;i++)
 fList[i]=scan.nextInt();

  for( i=0 ; i<fList.length ; i++)//to copy
  fList=sList;

 int min;
 {
 for ( i=0;i<sList.length ; i++)//sort
 min = i ; 
  for (int j=i+1 ; i<sList.length ; i++)
  if (sList[j] < sList[min] )
   min=j;

    int temp=sList[i];
    sList[i]=sList[min];
    sList[min]=temp;
 }

 System.out.println("Original array : ");
 for ( i=0 ; i < fList.length ; i++)
 System.out.println(fList[i] + " ");

 System.out.println();
 System.out.println("Array after sorting :");
 for ( i=0 ; i < sList.length ; i++)
 System.out.println(sList[i] + " ");

}
}

它说 :

q2.java:23: 变量 min 可能没有被初始化 if (sList[j] < sList[min] ) ^ q2.java:27: 变量 min 可能没有被初始化 sList[i]=sList[min]; ^ 2 个错误

虽然我已经初始化了它

4

4 回答 4

4
int min;

您尚未初始化min. 我可以看到你已经min = i ;for循环中完成了,但这仍然是有条件的(for可能并不总是执行,比如在这种情况下,数组是空的),这就是编译器这么说的原因。您需要使用默认值对其进行初始化

int min = 0;

if或在任何orfor或在这种情况下的任何条件语句之外为其分配一些值。

于 2013-11-13T05:07:19.730 回答
1
int min;

给它一个初始值。

int min = 0;
于 2013-11-13T05:07:21.117 回答
0

for您在循环内初始化 min 。编译器无法知道是否sList为空。如果为空,则不会运行初始化代码。这就是为什么它抱怨变量可能没有被初始化。

您应该min事先将您的值初始化为某个值。

就是说,声明后的第一个 for 循环min没有任何意义:min将始终等于sList.length-1then (并且i将是sList.length。您应该重新考虑您的逻辑。

于 2013-11-13T05:07:35.350 回答
0

即使不需要(目前),您也应该对所有块使用大括号 - 否则会变得笨拙。此外,您实际上并不需要iand min,但我把它留在了里面。

import java.util.*;

public class q2 {
    static Scanner scan = new Scanner(System. in );
    public static void main(String[] args) {
        int i;
        int[] fList = new int[6];
        int[] sList = new int[6];

        System.out.println("Enter 6 positive integers :");

        for (i = 0; i < fList.length; i++) {
            fList[i] = scan.nextInt();
        }

        //to copy
        for (i = 0; i < fList.length; i++) {
            fList = sList;
        }

        //sort
        for (i = 0; i < sList.length; i++) {
            int min = i;
            for (int j = i + 1; i < sList.length; i++) {
                if (sList[j] < sList[min])
                    min = j;

                int temp = sList[i];
                sList[i] = sList[min];
                sList[min] = temp;
            }
        }

        System.out.println("Original array : ");
        for (i = 0; i < fList.length; i++) {
            System.out.println(fList[i] + " ");
        }

        System.out.println();
        System.out.println("Array after sorting :");
        for (i = 0; i < sList.length; i++) {
            System.out.println(sList[i] + " ");
        }

    }
}
于 2013-11-13T05:11:03.337 回答