【问题标题】:Constructor and Methods are not giving output构造函数和方法没有给出输出
【发布时间】:2014-11-29 19:11:39
【问题描述】:

我正在编写关于健康记录计算机化的代码并制作程序。但是当我运行它时,它只给出输出:-

那个人的总年数是 21613

BMI 值 体重不足:小于18.5 正常:18.5 到 24.9 之间 超重:介于 25 和 29.9 之间 肥胖:30 或更大 输入身高和体重的值

但是我所有的其他方法都没有运行和构造函数,请告诉我如何解决这个问题? 我的程序是:-

import java.util.Scanner;

class Starter{

    private String FirstName;
    private String LastName;
    private String Gender;
    private int DOB;
    private int MOB;
    private int YOB;
    private double Height;  //inches
    private double Weight;  //KG.
    String greeting=FirstName+LastName+Gender;
    double BMI1;    
    public Starter(){
        Scanner input=new Scanner(System.in);
        System.out.println("Enter all the required data");
        FirstName=input.nextLine();
        LastName=input.nextLine();
        Gender=input.nextLine();
        DOB=input.nextInt();
        MOB=input.nextInt();
        YOB=input.nextInt();
    }





     public void setFirstName(String Fname){
           FirstName=Fname;

          }
       public void setLastName(String Lname){
           LastName=Lname;
       }
       public void setGender(String G){
           Gender=G;
           }
       public void setBirth(int Day,int Month,int Year){
           DOB=Day;
           MOB=Month;
           YOB=Year;


       }
       public String getFirstName(){
           return FirstName;
       }
       public String getLastName(){
           return LastName;
       }
       public String getGender(){
           return Gender;
       }
       public int getDOB()
       {
        return DOB;
    }
       public int getMOB(){
           return MOB;

       }
       public int getYOB(){
           return YOB;
        }
       public void BMI1(){
           System.out.println("Enter the value of Height and Weight");
           Scanner input1=new Scanner(System.in);
           Height=input1.nextFloat();
           Weight=input1.nextFloat();
            BMI1=Weight/(Height*Height);
            System.out.println("The BMI value is :\t"+BMI1);
       }
      public  void getYears(){
          int TotalYear=2014-YOB;
          int TotalMonth=12-MOB;
          int TotalDay=31-DOB;
          System.out.printf("The total years of that person is %d-%d-%d",TotalYear,TotalMonth,TotalDay);
          System.out.println("\n");
       }
      public    void BMI(){
            System.out.println("BMI values");
            System.out.println("Under weight:\tless than 18.5\n normal:\tbetween 18.5 and 24.9\nOverweight:\tbetween 25 and 29.9\nObese:\t30 or greater");
        }      
}





public class HeartRates {

public static void main(String[] args) {

       Starter getvalues2=new Starter();
       getvalues2.setFirstName("Sachin");
       getvalues2.setLastName("Godara");
       getvalues2.setGender("Male");
       getvalues2.setBirth(18,6,1993);
       getvalues2.getFirstName();
       getvalues2.getLastName();
       getvalues2.getGender();
       getvalues2.getDOB();
       getvalues2.getMOB();
       getvalues2.getYOB();
       getvalues2.getYears();
       getvalues2.BMI();
       getvalues2.BMI1();




        }


}

我的输出应该是:-

Enter all the required data
sam 
godara
male
18
6
1993
The total years of that person is 21-6-13

BMI values
Under weight:   less than 18.5
 normal:    between 18.5 and 24.9
Overweight: between 25 and 29.9
Obese:  30 or greater
Enter the value of Height and Weight
 2
78
The BMI value is :  19.5
Sachin 
godara
male
1861993

【问题讨论】:

  • 你的命名很混乱,请关注Java Naming Conventions
  • 但是我不明白先生,为什么命名如此重要,至少我的整个程序应该运行。但为什么它没有运行?
  • 编译器不关心命名,我们关心。这是为了可读性。
  • 那为什么我的构造函数和其他方法没有运行?
  • 我更正了构造函数中的错误,但我的其他方法没有运行?

标签: java methods constructor


【解决方案1】:

如果这个方法应该是构造函数:

void starter(){

应该是:

public Starter(){

否则,它只是一个普通的类方法,调用new Starter()时不会执行。

构造函数没有返回类型,Java 区分大小写。

编辑:

改变:

System.out.printf("The total years of that person is %d%d%d",TotalYear,TotalMonth,TotalDay);

到:

System.out.printf("The total years of that person is %d %d %d",TotalYear,TotalMonth,TotalDay);

为了使输出更具可读性。

【讨论】:

  • 好的,我使用了你的建议,我的构造函数正在运行,但我的其他方法没有?为什么以及为什么给出输出:- 该人的总年数是 21613。
  • @SachinGodara 哪些方法没有运行?你怎么知道他们没有跑?并非所有方法都打印输出。
  • 基本上现在我的输出是 Enter all the required data sachin godara male 18 6 1993 该人的总年数是 21613 BMI 值 体重不足:小于 18.5 正常:介于 18.5 和 24.9 之间 超重:介于 25和 29.9 肥胖:30 或更高 仅输入身高和体重的构造函数,BMI 和 BMI1 正在运行,但我的 set 和 get 方法没有给出任何输出。
  • @SachinGodara 您的方法正在运行,但其中一些没有将任何输出打印到 System.out。如果您添加空格,这一行 - The total years of that person is 21613 会更清晰(请参阅编辑后的答案)。
  • 是的,我用过,但是关于方法我也用 system.out.println(getvalues2.getFirstName()); system.out.println(getvalues2.getLastName()); //等但没有输出
【解决方案2】:

您缺少构造函数。如果这样:

void starter(){
    Scanner input=new Scanner(System.in);
    System.out.println("Enter all the required data");
    FirstName=input.nextLine();
    LastName=input.nextLine();
    Gender=input.nextLine();
    DOB=input.nextInt();
    MOB=input.nextInt();
    YOB=input.nextInt();
}

意味着作为构造函数,那么它是错误的。即使构造函数是一个 void 方法,它也不是这样声明的。将其更改为:

public Starter(){
    Scanner input=new Scanner(System.in);
    System.out.println("Enter all the required data");
    FirstName=input.nextLine();
    LastName=input.nextLine();
    Gender=input.nextLine();
    DOB=input.nextInt();
    MOB=input.nextInt();
    YOB=input.nextInt();
}

更新 1

这些方法:

getvalues2.getFirstName();
getvalues2.getLastName();
getvalues2.getGender();
getvalues2.getDOB();
getvalues2.getMOB();
getvalues2.getYOB();
getvalues2.getYears();

返回一个值。这并不意味着他们必须打印它..

试试

system.out.println(getvalues2.getFirstName());
system.out.println(getvalues2.getLastName());
....//etc

更新 2

还有为什么它给那个人的总年数是 21613 in 输出

这是因为:

System.out.printf("The total years of that person is %d%d%d",TotalYear,TotalMonth,TotalDay);

%d%d%d 表示 printf 期望 3 个 ints 作为争论点,并将 then 并排放置。

我认为这对你来说更有意义:

`%d%d%d` output `123`
`%d %d %d` output `1 2 3`
`%d-%d-%d` output `1-2-3`

所以你可以适当地改变它。

更新 3

 public void BMI1(){
     System.out.println("Enter the value of Height and Weight");
     Scanner input1=new Scanner(System.in);
     Height=input1.nextFloat();
     Weight=input1.nextFloat();
     BMI1=Weight/(Height*Height);
     System.out.println("The BMI value is :\t"+BMI1);
 }

根据您的评论,我假设您的 porgramm 挂在这里。此方法希望您在打印出某些内容之前输入 2 floats。因此,如果您不输入内容,它将无法到达System.out.println("The BMI value is :\t"+BMI1);

【讨论】:

  • 我删除了 void 但之后它在 Eclipse 中显示一个错误,即方法的返回类型丢失。
  • 那是因为 Java 是区分大小写的,而 Eclipse 是因为您创建了一个方法并且它缺少返回类型。您的构造函数必须与您的类的名称完全相同。所以public Starter() 而不是starter
  • 是的,我也使用 public,但它再次显示相同的错误。但是,如果我删除了我的构造函数部分,那么为什么除了 BMI 和 BMI1 之外我的其他方法没有运行。
  • 好的,我使用了你的建议,我的构造函数正在运行,但我的其他方法没有?
  • 请定义它们“如何”不运行?你怎么知道他们没有跑?预期的输出是什么?你会得到什么?
猜你喜欢
  • 1970-01-01
  • 2012-01-10
  • 2013-02-19
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 2015-06-05
相关资源
最近更新 更多