-3

このコードは、私の名を画面の垂直方向に表示するクラスであり、各文字は、各文字の間に空白行を入れて、私が入力した文字の最大5行x5列を使用します。

それは問題なく動作しますが、問題は文字列に静的を使用したことであり、私の教授はコードのどこにも静的であってはならないと言っていますが、メインです。文字列cから静的を削除すると、文字列cを宣言してもコードが壊れますメインの内側

public class Lab3
{

    static String c;

    public static void main(String[] args)
    {

        Lab3 classy = new Lab3();
        Scanner input = new Scanner(System.in);

        System.out.print("Which character would you like to display?");

        c = input.next();

        System.out.println("My name is Jonathan");
        classy.displayLetterJ();
        classy.displayLetterO();
        classy.displayLetterN();
        classy.displayLetterA();
        classy.displayLetterT();
        classy.displayLetterH();
        classy.displayLetterA();
        classy.displayLetterN();

    }//end of main

    public void displayLetterJ()
    {
        System.out.println("  " + c + c + c);
        System.out.println("    " + c);
        System.out.println("    " + c);
        System.out.println(c + "   " + c);
        System.out.println(c + c + c + c + c);

    }

    public void displayLetterA()
    {
        System.out.println();
        System.out.println("   " + c);
        System.out.println("  " + c + " " + c);
        System.out.println(" " + c + " " + c + " " + c);
        System.out.println(c + "     " + c);
        System.out.println(c + "     " + c);

    }

    public void displayLetterO()
    {
        System.out.println();
        System.out.println("  " + c + c);
        System.out.println(" " + c + "  " + c);
        System.out.println(c + "    " + c);
        System.out.println(c + "   " + c);
        System.out.println("  " + c + c);

    }

    public void displayLetterN()
    {
        System.out.println();
        System.out.println(c + "    " + c);
        System.out.println(c + " " + c + "  " + c);
        System.out.println(c + "  " + c + " " + c);
        System.out.println(c + "   " + c + c);
        System.out.println(c + "    " + c);

    }

    public void displayLetterH()
    {//H accessor
        System.out.println();
        System.out.println(c + "   " + c);
        System.out.println(c + "   " + c);
        System.out.println(c + c + c + c + c);
        System.out.println(c + "   " + c);
        System.out.println(c + "   " + c);

    }

    public void displayLetterT()
    {
        System.out.println();
        System.out.println(c + c + c + c + c);
        System.out.println("  " + c);
        System.out.println("  " + c);
        System.out.println("  " + c);
        System.out.println("  " + c);

    }
}
4

7 に答える 7

0

cパブリックゲッターとセッターのようなプライベートインスタンスフィールドを使用する必要があると思います。

public class Lab3 {

   private String c;

   public void setC(String c) 
   {
        this.c = c;
   }

   public String getC() 
   {
        return this.c;
   }

....


}

次に、メインの方法で次のように言うことができます。

Lab3 classy  = new Lab3();
Scanner input=new Scanner(System.in);

System.out.print("Which character would you like to display?");

classy.setC(input.next());
于 2013-02-06T15:58:04.030 に答える
0

私はこれの目的が何であるかわかりません...しかしこれは静的なしで動作するはずです

import java.util.Scanner;


/**
 *
 * @author john
 */
 public class Lab3 {


 public static void main(String[] args) {
     String c;
     Lab3 classy  = new Lab3();
     Scanner input=new Scanner(System.in);

          System.out.print("Which character would you like to display?");

          c = input.next();

        System.out.println("My name is Jonathan");
        classy.displayLetterJ(c);
        classy.displayLetterO(c);
        classy.displayLetterN(c);
        classy.displayLetterA(c);
        classy.displayLetterT(c);
        classy.displayLetterH(c);
        classy.displayLetterA(c);
        classy.displayLetterN(c);

      }//end of main
public void displayLetterJ(String c) {
    System.out.println("  "+c+c+c);
    System.out.println("    " +c);
    System.out.println("    " +c);
    System.out.println(c + "   " + c);
    System.out.println(c+ c+ c + c +c);

 }
 public void displayLetterA(String c){
    System.out.println();
    System.out.println("   "+c);
    System.out.println("  "+c+" "+c);
    System.out.println(" "+c+" "+c+" "+c);
    System.out.println(c+"     "+c);
    System.out.println(c+"     "+c);

}
  public void displayLetterO(String c){
    System.out.println();
    System.out.println("  "+c+c);
    System.out.println(" "+c+"  "+c);
    System.out.println(c+"    "+c);
    System.out.println(c+"   "+c);
    System.out.println("  "+c+c);

}
  public void displayLetterN(String c){
    System.out.println();
    System.out.println(c+"    "+c);
    System.out.println(c+" "+c+"  "+c);
    System.out.println(c+"  "+c+" "+c);
    System.out.println(c+"   "+c+c);
    System.out.println(c+"    "+c);

}
 public void displayLetterH(String c){//H accessor
    System.out.println();
    System.out.println(c+"   "+c);
    System.out.println(c+"   "+c);
    System.out.println(c+c+c+c+c);
    System.out.println(c+"   "+c);
    System.out.println(c+"   "+c);

}
  public void displayLetterT(String c){
    System.out.println();
    System.out.println(c+c+c+c+c);
    System.out.println("  "+c);
    System.out.println("  "+c);
    System.out.println("  "+c);
    System.out.println("  "+c);

    }

}

于 2013-02-06T15:58:29.477 に答える
0

変化する

public class Lab3 {
   static String c;

public class Lab3 {
     private String c;   
     public void setC(String c){this.c=c;}

何かのようなもの:

public static void main(String[] args) {

     Lab3 classy  = new Lab3();
     Scanner input=new Scanner(System.in);
     c = input.next();
     classy.setC(c);

     .....
    }
于 2013-02-06T15:59:18.227 に答える
0

主な問題は、変数がクラスのインスタンスにアタッチされていない場合、コンテキストstaticから参照できないことです。staticこれは、非静的変数が特定のインスタンスの一種の状態を表すためです。

あなたmain()は静的なので、c = ..違法です。静的メソッドで作成したインスタンスのclassy.c = ..特定のものを参照するように、を試してください。StringLab3

于 2013-02-06T15:53:12.630 に答える
0

この問題に直面するいくつかのアプローチがあります。1つは次のとおりです。メインメソッド内でc文字列を定義し、すべてのメソッドの引数としてc文字列を渡します。

他のアプローチとしては、c Stringをクラス属性(非静的)として定義し、メソッド内で「this.c」を使用してcStringを参照することができます。

1-属性を静的として宣言する場合、それはその属性がクラスのすべてのインスタンスに共通であることを意味します。非静的属性は、現在のクラスインスタンスの一部です。

于 2013-02-06T15:53:43.713 に答える
0

メソッドmain内でのみ文字列を初期化します

文字列c=input.next();

于 2013-02-06T15:55:53.457 に答える
0

この方法で文字cを使用するには、メソッドをリファクタリングする必要があります

public void displayLetterJ(String c)
{
   System.out.println("  "+c+c+c);
   System.out.println("    " +c);
   System.out.println("    " +c);
   System.out.println(c + "   " + c);
   System.out.println(c+ c+ c + c +c);
}

メインから呼び出す

classy.displayLetterJ("*");
于 2013-02-06T15:56:25.350 に答える