【问题标题】:How can I find a problem in my Java code?如何在我的 Java 代码中找到问题?
【发布时间】:2020-03-01 22:34:19
【问题描述】:

我正在尝试为我的 IT 课程做作业,我们刚刚开始编程。我们有 2 个班级,Main 和 Okej。这只是一个简单的代码,getter 和 setter 必须检查用户是否输入了正确的数字。但是 IF 语句不起作用。

package okej;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner program = new Scanner(System.in);

        System.out.println("Please, type your Name.");
        String name = program.nextLine();
        System.out.println("Please, type your age.");
        int age = program.nextInt();
        System.out.println("Please, type your weight.");
        double weight = program.nextDouble();


        Okej you = new Okej(name, age, weight);
        System.out.print(you);
    }

}

package okej;

import java.util.Scanner;

public class Okej {

    String name = "";
    int age = 0;
    double weight = 0.0;

    public Okej(String name, int age, double weight) {
        this.name = name;
        this.age = age;
        this.weight = weight;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("Okay, your name is " + name + ".");
        this.name = name;
    }

    public int getAge() {
        return age;
    }


    public void setAge(int age) {
        if (age > 18) {
            if (age < 99) {
        this.age = age;
        System.out.println("Okay, your age is " + age + "."); 
        }
    }
        else {
            System.out.println("You have put an invalid age for this program.");
            System.out.println("Setting the number to 20.");
            this.age = 20;
        }

    }

    public double getWeight() {
        return weight;
    }   

    public void setWeight(double weight) {
        if (weight > 30) {
            if (weight < 300) {
        this.weight = weight;
        System.out.println("Okay, your weight is " + weight + "."); 
            }
        }
        else {
            System.out.println("You have put an invalid weight for this program.");
            System.out.println("Setting the number to 50.");
            this.weight = 50;
        }
    }


    @Override
    public String toString() {
        return "Okay, your name is " + name + ", your age is " + age + ", and you weight "+ weight +".";
    }

}

【问题讨论】:

  • 你没有在任何地方调用 setter。
  • 嗯,这比我想象的要容易......谢谢 jalyn2。
  • 顺便说一句,当将年龄 >= 99 传递给 setter 时,什么也没有发生。

标签: java json


【解决方案1】:

它不起作用,因为验证您的输入的逻辑在 setters 内,而您没有调用它。您正在通过不执行任何验证的构造函数创建对象。您可以执行以下操作之一:

  • 将验证代码移动到静态方法并在构造函数中调用它以在赋值之前进行验证
  • 使用内置验证码的构建器
  • 创建空对象(使用默认构造函数)并使用 setter 设置将触发验证的值 ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多