日期:2014-05-20  浏览次数:20735 次

菜鸟 问问引用问题。
public   static   void   main(String[]   args)   {
//   TODO   自動生成されたメソッド・スタブ

int   a[]=new   int[100];
for(int   i=0;i <a.length;i++){
a[i]=(int)(Math.random()*100);
}
sort(a);//(1)
for(int   j=0;j <=a.length;j++){
System.out.println( "a[ "+j+ "]   =   "+a[j]);
}
}
public   /*static*/   void   sort(int   b[]){
int   temp;
//for(int   i=0;i <b.length;i++)
for   (int   i=0;i <b.length;i++)  
for(int   j=0;j <b.length-i-1;j++){
if   (b[i] <b[i+1]){
temp=b[i];
b[i]=b[i+1];
b[i+1]=temp;
}

(1)那提示我不能对非静态方法sort()进行静态引用。
不太明白,大侠们给讲讲。

------解决方案--------------------
你把sort()方法写到类里面去呀
------解决方案--------------------
/*static*/ -> static
------解决方案--------------------
可能你是受了C的影响!
你这样直接的调用是不行的!
你可以尝试新建立一个类,然后将该方法放入其中,在调用的时候用:CLASS.NAME()
调用!

另外一个方法就是用加:STATIC

或者用你现在的类.NAME()来调用!
------解决方案--------------------
另外如果你对这方面不是很理解可以看一下关于JAVA程序初始话的流程的文章!

STATIC的变量或者方法是在最初初时化的,如果按照你现在这样是不能在调用之前初始化!

如果你放到另外一个类里,会在调用之前进行初始化!
------解决方案--------------------
sort方法写在main函数外面,你的冒泡法也写错了。
package test;

public class Test {

public static void main(String[] args) {

int a[] = new int[5];
for (int i = 0; i < a.length; i++) {
a[i] = (int) (Math.random() * 100);
}
sort(a);
for (int j = 0; j < a.length; j++) {
System.out.println( "a[ " + j + "] = " + a[j]);
}

}

public static void sort(int b[]) {
int temp = 0;
for (int i = 0; i < b.length; i++) {
for (int j = i + 1; j < b.length; j++) {
if (b[i] > b[j]) {
temp = b[j];
b[j] = b[i];
b[i] = temp;
}
}
}
}
}

------解决方案--------------------
是你引用的问题,不可以在静态的方法里引用非静态的方法
------解决方案--------------------
在静态方法里不能引用非静态的方法,变量
但在非静态方法里可以引用静态方法与变量
main()函数是一个 静态的方法
要直接调用其他的方法的话 那个方法必须是静态的 也就是必须用 static 修饰