将getter和setter与userinput一起使用是否是一种好习惯?我寻找了一些示例,但找不到任何示例。虽然下面的代码有效,但这是一个好习惯吗?我注意到如果使用下面的代码,则无法使用构造函数。谢谢您的解释。
public class Tests{
private String name;
private int id;
Scanner userinput = new Scanner(System.in);
public void setName(){
System.out.println("Enter a name: ");
name= userinput.next();
}
public String getName(){
return name;
}
public void displayInfo(){
setName();
System.out.println("You entered " + this.getName());
}
public static void main(String [] args){
Tests test = new Tests();
test.displayInfo();
}
}
答案 0 :(得分:3)
我会说这是可怕的做法。它违反了“ bean”合同,并且没有遵循single responsibility principle(它变异并提示输入值)。这个
1
应该是
public void setName(){
System.out.println("Enter a name: ");
name= userinput.next();
}
然后(无缘无故地将public void setName(String name){
this.name = name;
}
设置为字段)
Scanner
答案 1 :(得分:2)
我认为您的做法不好。您可以关注这一点。在主函数中进行输入,然后使用
将输入值设置为namepublic void setName( String name){
this.name =name;
}
或者您可以使用其他方法,例如takeInput(){}
,然后从main方法调用它,然后在setter方法中进行设置。像这样
public static void main(String[] args){
Tests tests= new Tests();
String inputString =tests.takeInput();
tests.setName(inputString);
tests.displayInfo();
}
takeInput()会这样
public String takeInput(){
System.out.println("Enter your name");
String str =userinput.next();
return str;
}
displayInfo()
仅显示数据
并且在创建Test类对象时已经在使用构造函数。这称为默认构造函数。您还可以定义参数化的构造函数,例如
Tests(String name){
this.name = name;
}
但是在这种情况下,您不需要声明参数化的构造函数。
为了获得更好的设计,您可以创建另一个类,例如Info.java,您可以在其中定义类成员,例如name以及其getter和setter,并且只能将Tests类用于主要方法。
答案 2 :(得分:1)
我建议您使用1个参数更改setName()方法。这将是干净的,并且将有助于避免许多错误。而且,您必须对getName()方法进行一些更改。并在班级检查中移除扫描仪。
public const string NAME_REGEX = @"^[\da-zA-Z-+_*&=^%$#@(){}~!]{8,12}$";
答案 3 :(得分:0)
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
a = finalres # Store your dictionary here
x, y = zip(*a.keys())
z = list(a.values())
# Plotting
fig = plt.figure()
ax = fig.gca(projection = '3d')
dx = .25 * np.ones(len(x))
dy = .25 * np.ones(len(y))
dz = z
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.bar3d(x, y, z, dx, dy, dz, color = 'blue')
plt.show()