-1

所以我正在做这个项目,我无法将变量从一个类移动到另一个类。这个小软件的目标是让用户输入两条信息,一条是字符串,另一条是整数。我还有 2 个类,一个用于检索信息,另一个用于计算信息。这是名为 Software 的第一类:

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

这是第二类,称为设备:

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

  }
4

4 回答 4

1

不知道为什么我在我的 movil 设备上以用户身份发布,但重点是:

首先,在软件类中,您有 2 个对象“设备”,按照 MVC 架构,您应该只为视图类声明 1 个控制器对象,首先我建议您只为软件类声明 1 个设备,就像这样,我们重新使变量受保护只是因为它们应该是私有的或受保护以尊重封装:

public class Software {

  protected Devices devices;
  protected Scanner softwareName;
  protected Scanner devicesAmount;
... }

我建议您对 Devices 类变量执行相同的操作。

然后我们将为 Devices 类构建一个适当的构造函数,以便我们可以通过类移动值:

public Devices (String softwareName) {
  this.softwareName = softwareName;
  this.newDevices = 0;
}

所以我们可以在 Devices 类中拥有这个值。然后我们需要为newDevices添加 getter并将toString方法添加到 Devices 类中,以便您可以打印该对象。

public int getNewDevices() {
  return newDevices;
}

public String toString() {
  return softwareName + " & " + newDevices;
}

然后我们将在 Software 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()方法,但是为控制器类构建 getter 和 setter 通常是一种很好的做法;)。

于 2015-12-12T10:09:05.897 回答
0

如果您想以“标准”方式构建项目,我强烈建议您阅读 MVC(模型-视图-控制器)。

要解决您的问题,您可以为每个类添加需要移动的每个变量的 getter 和 setter,以便您可以在类之间移动值。

像二传手这样:

public void setValue(Object value) {
  this.value = value;
}

这对于吸气剂:

public Object getValue() {
  return this.value;
}
于 2015-12-12T09:16:27.050 回答
0

扫描仪、设备、软件、类和对象之间的大小写相同的名称非常混乱。

我应该建议清楚地重命名你的类和变量。

一些进一步的建议:

  • 为什么将 Scanner 保留为变量?这不是数据,它是获取数据的媒体。

  • 为什么要记录数据?像软件名称(扫描仪和字符串)。

我会

  • 添加两个变量(软件名和数量),私有

  • 留着它们

  • 向 Set 和 Get 添加方法

于 2015-12-12T09:17:52.730 回答
-1

Calculations()(和其他人)不会编译。可能您需要为该方法添加一个参数,然后您就完成了(?):

 public void Calculations(int devices2){
 ...
于 2015-12-12T09:08:49.140 回答