本帖最后由 zax0zax 于 2010-01-23 16:47:23 编辑

解决方案 »

  1.   


    static int[] nums  new int[5]; 
    数组 个数 为 0 个 ,楼主 你有 才啊 
      

  2.   

    s=0;
    数组长度为0,循环判定 i <= -1 从一开始就不成立。
    后面就都出错了你把s赋值成5或者6,7,8
      

  3.   

    我在main里改s的值,这样不行吗?
      

  4.   

    main里修改s.不会影响已经初始化好的数组
      

  5.   


    程序是先执行静态的变量或静态快,然后才进入main()函数的。
      

  6.   

    --------------------Configuration: <Default>--------------------
     数组的大小在编译时就已经决定了,应该推迟到运行时根据用户输入决定数组大小,请看我的部分
    //package gui; import java.util.*;   // for Scannerpublic class G { 
    public G() { 
    // TODO Auto-generated constructor stub 
    } static   int s =0; static int[] nums = new int[s];  //数组的大小在编译时已经,而应该在运行时根据用户的输入动态决定
    static Scanner input = new Scanner(System.in); 
    // 做个从小到大排序的程序 
    public static void arr() { 
    // 数据输入处理中 
    for (int i = 0; i <= s-1; i++) { // 这里的5改成s------------------------------------------ 
    if (i == 0) { 
    System.out.println("请输入你要排序的数据:"); 

    if (i > 0) { 
    if (i == s-1) {// 这里的5改成s------------------------------------------ 
    System.out.println("这是最后一个数据了!!!"); } 
    System.out.println("请再次输入你要排序的数据:"); } 
    int num = input.nextInt(); 
    //System.out.println("nums[i]="+nums[i]);
    System.out.println("num="+num);
    nums[i+1] = num; 

    // 数据正以升序排序中^^---------------------------------6
    //--- 
    for (int m = 1; m <= s; m++) { 
    for (int j = 0; j < s - m; j++) { 
    if (nums[j] > nums[j + 1]) { 
    int mid = nums[j + 1]; 
    nums[j + 1] = nums[j]; 
    nums[j] = mid; 
    } } 

    for (int x : nums) { 
    System.out.print(x + " <= "); 
    } } 
    public static void main(String[] args) { 
    //input = new Scanner(System.in); 
    /*input 已经是类中的一个static的Scanner类型的对象的引用,
    *这里不必再给它赋另一个新的对象引用
    */
    System.out.println("请先输入你要输入的数据总数!!:"); 
    int sum = input.nextInt(); 
    System.out.println("s="+s); //打印s被赋值前的值
    s = sum;                     
    System.out.println("s="+s);//打印s被赋值后的值
    System.out.println("array size="+nums.length );//打印数组的大小

    arr(); 
    } } 
    运行结果
    请先输入你要输入的数据总数!!:
    8
    s=0
    s=8
    array size=0
    请输入你要排序的数据:
    6
    num=6
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
        at G.arr(G.java:36)
        at G.main(G.java:66)Process completed.
      

  7.   

     我修改后的程序如下://package gui; import java.util.*;   // for Scannerpublic class aBubleSort { 
    public aBubleSort() { 
    // TODO Auto-generated constructor stub 
    } static int s = 0 ;  
    static Scanner input = new Scanner(System.in);  
    public static void main(String[] args) { 
         System.out.println("请先输入你要输入的数据总数!!:");
         s = input.nextInt();
         bubleSort();

     static void bubleSort(){      //用冒泡排序法排序输入数组
        int[] nums = new int[s]; //在排序函数里建一个动态数值,不过数组是局部的只在函数内部可见
        System.out.println("请输入你要排序的数据:");
    for (int i = 0; i <= s-1; i++) {  
        int num = input.nextInt(); 
        nums[i] = num;
        if (i == s-1){
         System.out.println("这是最后一个数据了!!!"); 
        }
      
        else  {
         System.out.println("请输入你要排序的下一个数据:"); 
        }   //这样是不是比用多重if嵌套简洁多了,只不过用了一个if -else语句^_^

        }
      for (int m = 1; m <= s; m++) { 
        for (int j = 0; j < s - m; j++) { 
        if (nums[j] > nums[j + 1]) { 
        int mid = nums[j + 1]; 
        nums[j + 1] = nums[j]; 
        nums[j] = mid; 
        } } 

    for (int x : nums) { 
    System.out.print(x + " <= "); 
    } } 
     }
    不过我搞不明白如何让数组为类的数据成员,大小又可以动态决定,望有高手来解决!