-2

スタックのプライベート クラス メンバーを作成しましたが、オブジェクトを使用していませんが、メイン メソッドから直接または間接的にアクセスする方法がわかりません。プログラムがソートメソッドを実行すると、プライベートメンバー「stk[]」が自動的に直接変更されます。

これは、メイン メソッドからソート オプションが呼び出されたときに、メイン メソッドから間接的にプライベート String stk[] を変更するコードです。

import java.io.*;
class Stack
{
   private String stk[];
   private int tos;
   private int size;
   Stack()
   {
      size=5;
      stk=new String[size];
      tos=-1;
   }
   Stack(int sz)
   {
      size=sz;
      stk=new String[size];
      tos=-1;
   }
   boolean push(String s)
   {
      if(tos==size-1) return false;
      stk[++tos]=s;
      return true;
   }
   String pop()
   {
      if(tos<0) return "Stack Underflow";
      return stk[tos--];
   }
   String[] display()//array type function to return an array called "stk"
   {
      return stk;
   }
   int returnSize()
   {
      return tos;
   }
}
class myStack
{
   public static void main(String args[]) throws IOException
   {
      BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
      Stack S=new Stack();
      int opt=-1;
      while(opt!=6)
      {
         System.out.println("\n\n\n");
         System.out.println("[1] - Create Stack");
         System.out.println("[2] - Push");
         System.out.println("[3] - Pop");
         System.out.println("[4] - Display");
         System.out.println("[5] - Display List In Ascending Order");
         System.out.println("[6] - Exit");
         System.out.print("Option: ");
         opt=Integer.parseInt(br.readLine());
         if(opt==1)
         {
            System.out.print("\n\nEnter the size of stack: ");
            int size=Integer.parseInt(br.readLine());
            S=new Stack(size);
            System.out.print("\nStack Created...");
         }
         else if(opt==2)
         {
            System.out.print("\n\nEnter String: ");
            String s=br.readLine();
            if(S.push(s))
               System.out.print("\nSuccessfull...");
            else
               System.out.print("\nStack Overflow...");
         }
         else if(opt==3)
         {
            System.out.print("\nItem Deleted: "+S.pop());
         }
         else if(opt==4)
         {
            int sz=S.returnSize();
            System.out.print("\n\n\nStack Contains: "+(sz+1)+" Item(s)\n");
            String st[]=S.display();
            while(sz>=0)
            {
               System.out.println(st[sz]);
               sz--;
            }
         }
         else if(opt==5)
         {
            int s=S.returnSize();
            String stc[]=S.display();
            for(int i=0;i<=s;i++)
            {
               for(int j=i+1;j<=s;j++)
               {
                  if(stc[j].compareTo(stc[i])<0)
                  {
                     String t=stc[i];
                     stc[i]=stc[j];
                     stc[j]=t;
                  }
               }
               System.out.println(stc[i]);
            }
         }
         else if(opt>6)
         {
            System.out.print("\nPress 6 To Exit....");
         }
      }
   }
}
4

4 に答える 4

1

これはあなたが話していることだと思います..

String stc[]=S.display();
       for(int i=0;i<=s;i++) {
         for(int j=i+1;j<=s;j++) {
             if(stc[j].compareTo(stc[i])<0) {
                  String t=stc[i];
                  stc[i]=stc[j];
                  stc[j]=t;
             }
         }
         System.out.println(stc[i]);
        }

を呼び出すとS.display、配列への参照が渡され、その参照が に格納されstcます。stcthen は変更されますが、 であるためstc --> array <--- stk、両方を編集します。

于 2013-08-09T09:35:46.477 に答える
0

プライベートとは、メインであってもクラスの外部にアクセスできないことを意味します。メンバーがプライベートであり、外部にアクセスしたい場合は、プライベートな場合に外部にアクセスする理由は適切ではないと思います。以下を参照してください。

public class Stack
{
}
于 2013-08-09T09:35:55.720 に答える