-1

我想接受用户输入进行合并排序,所以我在ar[]方法中使用了数组,但它给出了错误“找不到符号” ar[]

import java.util.*;
import java.io.*;
class Test
{
int Merge()
    {
    int q,p,r,i,l,m,j,t,k,w,x,s,u;
    w=q-p+1;
    x=r-q;
    int[] L=new int [w+1];
    int b=1;
    for(s=1;s<=w+1;s++)
        {
        L[b]=s;
        b++;
        }
    int[] R=new int [x+1];
    int c=1;
    for(t=1;u<=x+1;u++)
        {
        R[c]=u;
        c++;
        }
    for(i=1;i<=w;i++)
        {
        L[i]=ar[p+i-1];
        }
    for(j=1;j<=x;j++)
        {
        R[j]=ar[q+j];
        }
    L[w+1]=1000;
    R[x+1]=1001;
    i=1;
    j=1;
    for(k=p;k<=r;k++)
        {
        if(L[i]<=R[j])
            {
            ar[k]=L[i];
            i=i+1;
            }
        else 
            {
            ar[k]=R[j];
            j=j+1;
            }
        }
    System.out.println("sorted array"+ar[k]);
    }

public static void main(String ar[])
    {
    int a0=Integer.parseInt (ar[0]);
    int a1=Integer.parseInt (ar[1]);
    int a2=Integer.parseInt (ar[2]);
    int a3=Integer.parseInt (ar[3]);
    int a4=Integer.parseInt (ar[4]);
    int a5=Integer.parseInt (ar[5]);
    int a6=Integer.parseInt (ar[6]);
    int a7=Integer.parseInt (ar[7]);
    int a8=Integer.parseInt (ar[8]);
    int a9=Integer.parseInt (ar[9]);
    int p=a0,r=a9,q;

    if(p<r)
       q=(p+r)/2;

    Test T=new Test();
    T.Merge();
    }
}
4

3 回答 3

1

您在方法中有一个ar局部变量main,但在方法中没有它Merge。局部变量和方法参数只是另一种局部变量,是……好吧,是声明它们的方法的局部变量。这意味着这样的变量在另一种方法中是未定义的。

例如,您可以拥有

 class Test {
   final int[] ar;
   Test(int[] ar) { this.ar = ar; }

   public static void main(String[] ar) {
      ....
      final Test t = new Test(ar);
      t.Merge();
   }
 }
于 2013-10-13T09:29:22.730 回答
1

ar只在方法范围内可见main,在其他方法中是未知的。为了在其他方法中看到它,你需要一个类成员来保存它的值。

于 2013-10-13T09:28:32.493 回答
0

ar 仅在 main 方法中可见,您需要在 main 方法中创建一个新数组。将读入的值复制到新数组中,并将此数组作为输入传递给合并方法。

于 2013-10-13T09:34:49.500 回答