java 一个调用小问题

来源:百度知道 编辑:UC知道 时间:2024/09/20 17:53:02
import java.util.*;
public class abig
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);

int aa;
int[] a;
aa = sc.nextInt();
for(int i = 0; i < aa; i++)
a[i] = sc.nextInt();

sorta(a,aa);

public void sorta(int[] v,int n)
{
int gap;
for(gap = n/2; gap > 0; gap /= 2)
{
for(int i = gap; i < n; i++)

{
for(int j = i - gap; j >= 0 && v[j] > v[j+gap]; j -= gap)
{
int temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;
}
}
}
}

}
}

abig.java:17: 非法的表达式开始
public void sorta(int[] v,int n)
^
abig.java:17: 非法的表达式开始
public void sorta(int[] v,int n)
^
abig.java:17: 需要 ';'

我给你修改了,代码如下:
  public class abig {
  public void sorta(int[] v, int n) {
  int gap;
  for (gap = n / 2; gap > 0; gap /= 2) {
  for (int i = gap; i < n; i++)

  {
  for (int j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap) {
  int temp = v[j];
  v[j] = v[j + gap];
  v[j + gap] = temp;
  }
  }
  }
  }

  public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);

  int aa;
  int[] a;
  aa = sc.nextInt();
  for (int i = 0; i < aa; i++)
  a[i] = sc.nextInt();

  sc.sorta(a, aa);

  }
  }

  错误原因:
  1.main方法调用的本类方法,成员方法应该写在main的外部!方法里面一般不会出现public static void sorta(int[] v, int n) 这种写法的方法的,你可以直接实现在main方法里面-----不过为了可重用性,还是写作成员方法吧。
  2.main方法里面实现了Scanner对象,就直接用sc.sorta(a, aa);调用它的方法,如果不创建Scanner对象,那么sorta方法必须定义为静态的,如:public static void sorta(int[] v, int n) ,因为main是静态的,静态方法只能调用静态方法。