如何从不同的 类 获取变量?
How to get variables from different classes?
所以我正在处理这个项目,但我无法将变量从一个 class 移动到另一个。这个微型软件的目标是让用户输入两条信息,一条是字符串,一条是整数。我还有 2 个 classes,一个用于检索信息,另一个用于计算信息。
这是第一个 class 名为软件:
import java.util.Scanner;
public class Software
{
public Scanner softwareName;
public Scanner devicesAmount;
public Software()
{
devicesAmount = new Scanner(System.in);
softwareName = new Scanner(System.in);
}
/**
*Gets the information from the user to later on process
*/
public void InfoGet()
{
Devices findDevices= new Devices();
Devices findNumber= new Devices();
String softwareName;
int devicesAmount;
Scanner sc= new Scanner(System.in);
System.out.println("Welcome to the Software License Calculator");
System.out.println("Please type in the name of the Software:");
softwareName = sc.nextLine();
System.out.println("");
System.out.println("Please type in the number of devices that have the software:");
devicesAmount=sc.nextInt();
findDevices.Calculations(devicesAmount);
findNumber.getNewDevices();
sc.close();
System.out.println(softwareName+ " & "+ findNumber);
}
}
这是第二个 class 称为设备:
public class Devices
{
public int NewDevices;
public String softwareName;
/**
* Gets number of Devices to preform the calculations of removing 1000 users
*/
public static void Devices()
{
Software getDevices= new Software();
getDevices.InfoGet();
}
public void Calculations(int devicesAmount){
if (devicesAmount>=1000){
NewDevices= devicesAmount - 1000;
}
else{
NewDevices=devicesAmount;
}
}
}
Calculations()
(和其他)不会编译。可能您需要向该方法添加一个参数,然后就完成了 (?):
public void Calculations(int devices2){
...
如果您想以 "standar" 方式构建项目,我强烈建议您阅读 MVC(模型-视图-控制器)。
要解决您的问题,您可以为每个 class 添加需要移动的每个变量的 getter 和 setter,这样您就可以在 class 之间移动值。
像这样的二传手:
public void setValue(Object value) {
this.value = value;
}
这是吸气剂:
public Object getValue() {
return this.value;
}
在扫描仪、设备、软件、类 和具有相同名称大小写的对象之间非常混乱。
我应该建议给你重命名 类 并明确变量。
一些进一步的建议:
为什么将 Scanner 保留为变量?这不是数据,而是获取它的媒体。
为什么要注意保存数据?像软件名称(扫描仪和字符串)。
我愿意
添加两个变量(软件名称和数量),private
保留它们
向 Set 和 Get 添加方法
不知道为什么我在移动设备上 post 作为用户,但要点:
首先,在 class Software 中,您有 2 个对象 "Device",按照 MVC 架构,您应该只为视图声明 1 个控制器对象class,首先,我建议您只为软件 class 声明 1 个设备,就像这样,我们将使变量受保护,因为它们应该是私有的或受保护的以尊重封装:
public class Software {
protected Devices devices;
protected Scanner softwareName;
protected Scanner devicesAmount;
... }
我建议您对设备 class 变量执行相同的操作。
然后我们将为 Devices class 构建一个合适的构造函数,以便我们可以通过 classes:
移动值
public Devices (String softwareName) {
this.softwareName = softwareName;
this.newDevices = 0;
}
因此我们可以在设备 class 上获得这些值。然后我们需要为 newDevices 添加 getter 并向 Devices class 添加 toString 方法,以便您可以打印对象。
public int getNewDevices() {
return newDevices;
}
public String toString() {
return softwareName + " & " + newDevices;
}
然后我们将在软件 InfoGet 方法中移动一些东西以正确构建设备并打印它。
public void InfoGet() {
String softwareName;
int devicesAmount;
Scanner sc= new Scanner(System.in);
System.out.println("Welcome to the Software License Calculator");
System.out.println("Please type in the name of the Software:");
softwareName = sc.nextLine();
System.out.println("");
System.out.println("Please type in the number of devices that have the software:");
devicesAmount=sc.nextInt();
devices = new Devices(softwareName); // So we initialize the object.
devices.Calculations(devicesAmount);
sc.close();
System.out.println(devices.toString()); // Here we just call the toString() method we build to print the values.
}
我们没有使用 getNewDevices() 方法,但是为控制器 classes 构建 getters 和 setter 通常是一个很好的做法;).
所以我正在处理这个项目,但我无法将变量从一个 class 移动到另一个。这个微型软件的目标是让用户输入两条信息,一条是字符串,一条是整数。我还有 2 个 classes,一个用于检索信息,另一个用于计算信息。 这是第一个 class 名为软件:
import java.util.Scanner;
public class Software
{
public Scanner softwareName;
public Scanner devicesAmount;
public Software()
{
devicesAmount = new Scanner(System.in);
softwareName = new Scanner(System.in);
}
/**
*Gets the information from the user to later on process
*/
public void InfoGet()
{
Devices findDevices= new Devices();
Devices findNumber= new Devices();
String softwareName;
int devicesAmount;
Scanner sc= new Scanner(System.in);
System.out.println("Welcome to the Software License Calculator");
System.out.println("Please type in the name of the Software:");
softwareName = sc.nextLine();
System.out.println("");
System.out.println("Please type in the number of devices that have the software:");
devicesAmount=sc.nextInt();
findDevices.Calculations(devicesAmount);
findNumber.getNewDevices();
sc.close();
System.out.println(softwareName+ " & "+ findNumber);
}
}
这是第二个 class 称为设备:
public class Devices
{
public int NewDevices;
public String softwareName;
/**
* Gets number of Devices to preform the calculations of removing 1000 users
*/
public static void Devices()
{
Software getDevices= new Software();
getDevices.InfoGet();
}
public void Calculations(int devicesAmount){
if (devicesAmount>=1000){
NewDevices= devicesAmount - 1000;
}
else{
NewDevices=devicesAmount;
}
}
}
Calculations()
(和其他)不会编译。可能您需要向该方法添加一个参数,然后就完成了 (?):
public void Calculations(int devices2){
...
如果您想以 "standar" 方式构建项目,我强烈建议您阅读 MVC(模型-视图-控制器)。
要解决您的问题,您可以为每个 class 添加需要移动的每个变量的 getter 和 setter,这样您就可以在 class 之间移动值。
像这样的二传手:
public void setValue(Object value) {
this.value = value;
}
这是吸气剂:
public Object getValue() {
return this.value;
}
在扫描仪、设备、软件、类 和具有相同名称大小写的对象之间非常混乱。
我应该建议给你重命名 类 并明确变量。
一些进一步的建议:
为什么将 Scanner 保留为变量?这不是数据,而是获取它的媒体。
为什么要注意保存数据?像软件名称(扫描仪和字符串)。
我愿意
添加两个变量(软件名称和数量),private
保留它们
向 Set 和 Get 添加方法
不知道为什么我在移动设备上 post 作为用户,但要点:
首先,在 class Software 中,您有 2 个对象 "Device",按照 MVC 架构,您应该只为视图声明 1 个控制器对象class,首先,我建议您只为软件 class 声明 1 个设备,就像这样,我们将使变量受保护,因为它们应该是私有的或受保护的以尊重封装:
public class Software {
protected Devices devices;
protected Scanner softwareName;
protected Scanner devicesAmount;
... }
我建议您对设备 class 变量执行相同的操作。
然后我们将为 Devices class 构建一个合适的构造函数,以便我们可以通过 classes:
移动值public Devices (String softwareName) {
this.softwareName = softwareName;
this.newDevices = 0;
}
因此我们可以在设备 class 上获得这些值。然后我们需要为 newDevices 添加 getter 并向 Devices class 添加 toString 方法,以便您可以打印对象。
public int getNewDevices() {
return newDevices;
}
public String toString() {
return softwareName + " & " + newDevices;
}
然后我们将在软件 InfoGet 方法中移动一些东西以正确构建设备并打印它。
public void InfoGet() {
String softwareName;
int devicesAmount;
Scanner sc= new Scanner(System.in);
System.out.println("Welcome to the Software License Calculator");
System.out.println("Please type in the name of the Software:");
softwareName = sc.nextLine();
System.out.println("");
System.out.println("Please type in the number of devices that have the software:");
devicesAmount=sc.nextInt();
devices = new Devices(softwareName); // So we initialize the object.
devices.Calculations(devicesAmount);
sc.close();
System.out.println(devices.toString()); // Here we just call the toString() method we build to print the values.
}
我们没有使用 getNewDevices() 方法,但是为控制器 classes 构建 getters 和 setter 通常是一个很好的做法;).