-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他のメソッドでは不明です。他のメソッドでそれを見るには、その値を保持するクラス メンバーが必要です。

于 2013-10-13T09:28:32.493 に答える
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 に答える
0

ar はメイン メソッドでのみ表示されます。メイン メソッドで新しい配列を作成する必要があります。読み取った値を新しい配列にコピーし、この配列をマージ メソッドへの入力として渡します。

于 2013-10-13T09:34:49.500 に答える