有人能帮我修复这个代码吗?(Java方法)

有人能帮我修复这个代码吗?(Java方法),java,methods,static,Java,Methods,Static,这段代码是一个类,它在屏幕上垂直显示我的名字,每个字母最多使用我输入的5行5列字符,每个字母之间有一条空行 它工作得很好,但问题是我对字符串使用了static,我的profs说代码中除了main之外不应该有static。当我从字符串c中删除static时,即使在main中声明字符串c,它也会破坏代码 public class Lab3 { static String c; public static void main(String[] args) {

这段代码是一个类,它在屏幕上垂直显示我的名字,每个字母最多使用我输入的5行5列字符,每个字母之间有一条空行

它工作得很好,但问题是我对字符串使用了static,我的profs说代码中除了main之外不应该有static。当我从字符串c中删除static时,即使在main中声明字符串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);

    }
}

主要问题是,如果一个变量不是
静态的
,那么它就被附加到一个类的实例上,因此不能从
静态的
上下文引用它。这是因为非静态变量表示特定实例的某种状态


您的
main()
是静态的,因此
c=..
是非法的。尝试使用
classy.c=..
,这样您将引用在静态方法中创建的
Lab3
实例的特定
字符串。

有几种方法可以解决此问题,其中一种可能是: 在主方法中定义c字符串,然后将c字符串作为参数传递给所有方法

另一种方法是将c字符串定义为类atribute(非静态),然后在方法内部使用“this.c”来引用c字符串

1-如果将属性声明为静态,则意味着该属性将与类的所有实例一致。
非静态属性只是当前类实例的一部分

仅在主方法内部初始化字符串


字符串c=input.next()

您应该重构您的方法,以便以这种方式使用字符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);
}
并从main作为

classy.displayLetterJ("*");

我认为您应该使用私有实例字段
c
like和公共getter和setter:

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());

我不知道这是为了什么。。。但这应该在没有静电干扰的情况下工作

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);

    }
}改变

public class Lab3 {
   static String c;

比如:

public static void main(String[] args) {

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

     .....
    }

它是如何打破的,你会犯什么错误?你知道静态方法和非静态方法的区别吗?@所有的反对者:这是课程作业,没有澄清或至少对这里的错误进行评论就不需要进行反对投票。课程作业?你的老师应该被解雇。事实上,第二步不是必需的,它们不是静态方法。另外,第二步在这一点上可能是有害的(从问题判断),因为不是真正学习如何使用实例变量,它会导致下降到过程代码中。是的!我太专注于解决问题了,我忘了这更像是一个学习者问题,而不是一个问题。第一个问题做得很好,很简单。这将如何帮助他了解使用静态代码和实例之间的区别?这不会影响Matt,你是对的。谢谢,所以我所要做的就是在main方法中定义c字符串,然后将其作为参数传递给其他方法。这很有效。我认为下面的其他答案也可以,但就我目前的水平而言,这是最容易理解的。
public static void main(String[] args) {

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

     .....
    }