【问题标题】:Java string array with setter getter带有setter getter的Java字符串数组
【发布时间】:2020-02-03 10:03:04
【问题描述】:

我想为用户创建一个简单的程序,将 3 个字符串插入到类中的私有字符串数组中,然后通过使用对象引用创建一个新对象将其打印回来,但我认为我在 setter/getter 中遇到了问题。 (对类和 setter/getter 很陌生)这是我目前所拥有的:

import java.util.Scanner;
public class Stringtest {
public static void main(String[] args)
{   Scanner input=new Scanner(System.in);


   Stringer Strung=new Stringer();

    System.out.println("Strings:"+Strung.print());


}
}
class Stringer
{   Scanner input=new Scanner(System.in);
    private String[] aa=new String[3];
    aa[0]="zero";
    aa[1]="one";
    aa[2]="two";

    Stringer()
    {}

{  System.out.println("Please enter 3 strings:");

    for(int i=0;i<4;i++)
    {
        aa[i]=input.next();
    }
}

public  void setaa(String[] a)
{
    aa=a;
}

public String[] getaa()
{
    return aa;
}

public void print(String[] a)
{
    for(int b=0;b<4;b++)
    {
        System.out.printf("%s",a[b]);
    }
}

}

【问题讨论】:

  • 您的预期输出是什么?你观察到的输出是什么。此外,您使用initializer block。我建议将逻辑从初始化程序块移动到构造函数。此外,在初始化程序和 print() 方法中,for 循环从 03(包括两者),但数组只有 3 的长度(索引 0 到 @987654329 @),所以这将导致ArrayIndexOutOfBoundsException。 --- 虽然您已经为 aa 编写了 getter 和 setter(为了清楚起见,我建议将其重命名),但您不使用它们。
  • 和一个提示:如果你想遍历一个数组的所有元素,通常使用for (int i = 0; i &lt; aa.length; i++) - 所以如果他的数组的大小改变了,代码仍然有效
  • 啊,对不起,我想我忘了将字符串数组初始化为几个字符串。我想拥有 setter 和 getter,以便用户输入可以通过创建新对象类来替换初始化的私有字符串数组

标签: java arrays string class setter


【解决方案1】:
  1. 由于在创建类实例时填充数组,您不需要任何 setter。唯一的 getter 需要。

  2. 将逻辑与跑步者分开。

  3. 在循环时始终使用array.length() 或使用简单的for 循环,否则您将收到indexOfBoudException 错误。

  4. 不明白为什么在打印结果时使用printf()

    我的解决方案:

    import java.util.Scanner;
    
    public class App {
        public static void main(String[] args) {
            App.run();
        }
    
        private static void run() {
            Stringer stringer = new Stringer();
            stringer.print(stringer.getStrings());
        }
    }
    
    class Stringer {
    
        private String[] strings = new String[3];
    
        Stringer() {
            System.out.println("Please enter 3 strings:");
            for (int i = 0; i < 4; i++) {
                Scanner scanner = new Scanner(System.in);
                strings[i] = scanner.next();
            }
        }
    
        String[] getStrings() {
            return strings;
        }
    
        void print(String[] strings) {
            System.out.println("Strings are:");
            for (String string : strings) {
                System.out.println(string);
            }
        }
    }
    

【讨论】:

  • 我忘了初始化数组,但我想在创建新对象类时使用 setter/getter,我可以引用该类来访问和修改私有字符串数组
  • 根据你的代码和你声明setter的目的是不必要的。有代码约定:不要有未使用的类/方法/变量“以防万一”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
相关资源
最近更新 更多