繁体   English   中英

如何使用来自另一个类的私有变量打印默认构造函数

[英]how to print the default constructor with private variables from another class

我想打印默认的私有bloodtyperhfactor ,这是O++我想从另一个具有main方法的类打印它。

我已经尝试过创建新对象并打印它们,但它仍然说我正在访问一个私有变量。 当您在scanner上输入内容时,它会打印它,但如果您输入任何内容,我想用私有变量打印构造函数!

public class blooddata {

    private String bloodtype;
    private String rhFactor;

    blooddata(){
        bloodtype = "O";
        rhFactor = "+";
    }

    blooddata(String btx, String rhx){
        this.bloodtype = btx;
        this.rhFactor = rhx;
    }

    public String getblood (String bloodtype){
        return bloodtype;
    }

    public String getfactor (String rhFactor){
        return rhFactor;
    }

    public void setblood(String bloodtype){
        this.bloodtype = bloodtype;
    }

    public void setfactor(String factor){
        this.rhFactor = factor;
    }
}

这是具有main方法的类

import java.util.Scanner;

public class Runblooddata {

    static Scanner sc = new Scanner(System.in);
    static String btx;
    static String rhx;

    public static void main(String[] args) {

        System.out.print("Enter blood type: ");
        btx = sc.nextLine();

        System.out.print("Enter rhFactor: ");
        rhx = sc.nextLine();

        if (btx.isEmpty() || rhx.isEmpty()){
           blooddata asd = new blooddata(); //this is where i am lost
        }else{   
            blooddata bd = new blooddata();
            bd.setblood(btx);
            bd.setfactor(rhx);

            System.out.println(bd.getblood(btx));
            System.out.println(bd.getfactor(rhx));
        }
    }
}

吸气剂不应该有参数。

声明名称与字段相同的方法参数时,该参数会隐藏该字段。 你基本上返回你参数。

6.4.1。 阴影

在整个d范围内,名为n shadows的字段或形式参数的声明d,名称为n的任何其他变量的声明,这些变量在d出现的范围内。

public String getBlood() {
    return bloodtype;
}

public String getFactor() {
    return rhFactor;
}

我会帮你简化一下。

final class Example {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter blood type: ");
        String btx = sc.nextLine();

        System.out.print("Enter rhFactor: ");
        String rhx = sc.nextLine();

        BloodData data = btx.isEmpty() || rhx.isEmpty() ? 
                new BloodData() : 
                new BloodData(btx, rhx);

        System.out.println(data.getBloodType());
        System.out.println(data.getRhFactor());
    }
}

final class BloodData {

    private final String bloodType;
    private final String rhFactor;

    BloodData() {
        this("O", "+");
    }

    public BloodData(String bloodType, String rhFactor) {
        this.bloodType = bloodType;
        this.rhFactor = rhFactor;
    }

    public String getBloodType() {
        return bloodType;
    }

    public String getRhFactor() {
        return rhFactor;
    }
}

由于Andrew已经在您的代码中解释了设计问题,我将引导您找到您正在寻找的解决方案。

    blooddata bd = new blooddata();

    if (!btx.isEmpty() && !rhx.isEmpty()){

        bd.setblood(btx);
        bd.setfactor(rhx);
    }
    System.out.println(bd.getblood());
    System.out.println(bd.getfactor());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM