Java 程序编译并运行,但不';我什么也不输出

Java 程序编译并运行,但不';我什么也不输出,java,methods,compiler-construction,Java,Methods,Compiler Construction,我从来没有遇到过这个问题,因为没有给出任何错误,我甚至不确定该去哪里查找。我用这个程序玩得很开心(这是我第一次用这些方法)。在此问题之前,它一直抛出异常。当我研究那篇文章并设法纠正错误时,我感觉它不对。请让我知道整个代码是否关闭(最好是一些建设性的批评),或者我是否接近: import java.io.*; public class InsuranceMethod2//class name here, same as file name { // use BufferedReader

我从来没有遇到过这个问题,因为没有给出任何错误,我甚至不确定该去哪里查找。我用这个程序玩得很开心(这是我第一次用这些方法)。在此问题之前,它一直抛出异常。当我研究那篇文章并设法纠正错误时,我感觉它不对。请让我知道整个代码是否关闭(最好是一些建设性的批评),或者我是否接近:

import java.io.*;

public class InsuranceMethod2//class name here, same as file name

{   

// use BufferedReader class to input from the keyboard
// declare a variable of type BufferedReader
private BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
//declare variable for input
private String inputString;

    String carChoice;
    boolean insurable;
    int year;

public void InsuranceMethod2()throws IOException{//constructor, place class name here

String carChoice;
boolean insurable;
int year; 

initialize();
insureProcess();
cleanUp();
}//end constructor

public void initialize(){
    System.out.println();
    System.out.println("Insurance Process Intializing");
}//end initialize

public void insureProcess() throws IOException {

    String carChoice;
    boolean insurable;
    int year;

    System.out.println("Enter your vehicle model: ");
    inputString = input.readLine();
    carChoice = inputString;
            if(carChoice.equalsIgnoreCase("ford") || carChoice.equalsIgnoreCase("chevy") || carChoice.equalsIgnoreCase("toyota"))
    {
        System.out.println("Enter the vehicle year: ");
        inputString = input.readLine();
        year = Integer.parseInt(inputString);
        if(year >= 1990)
        {
            System.out.println("Your vehicle is insurable");
        }
    }
}

public boolean checkModel(){
    if(carChoice.equalsIgnoreCase("Ford")|| carChoice.equalsIgnoreCase("Chevy")|| carChoice.equalsIgnoreCase("Toyota"))
    {
        return true;
    }
    else
    {
        return false;
    }
}//end checkModel

public boolean checkYear(int year){
    return false;
}//end checkYear

public void printResults(boolean insurable){

}//end printResults

public void cleanUp(){
    System.out.println("Program ending");
}//end cleanUp

public static void main(String [] args) throws IOException // main method

{
    new InsuranceMethod2(); //class constructor name
} // end the main method
} // end the program

您的程序只需创建InsuranceMethod类的新实例。然后,该类的构造函数将运行,并且由于您尚未定义构造函数(您定义的方法具有使其不是构造函数的返回类型),因此默认构造函数将运行(并且不执行任何操作)。因此,您没有看到任何输出。如果希望使用相同的名称调用该方法,请编写:

new InsuranceMethod2().InsuranceMethod2();

否则,您应该从方法中删除
void
关键字以将其转换为构造函数。

您的程序只需创建InsuranceMethod类的新实例。然后,该类的构造函数将运行,并且由于您尚未定义构造函数(您定义的方法具有使其不是构造函数的返回类型),因此默认构造函数将运行(并且不执行任何操作)。因此,您没有看到任何输出。如果希望使用相同的名称调用该方法,请编写:

new InsuranceMethod2().InsuranceMethod2();
 public void InsuranceMethod2() throws IOException{ //constructor
否则,应该从方法中删除
void
关键字以将其转换为构造函数

 public void InsuranceMethod2() throws IOException{ //constructor
这不是一个构造函数。这只是一个方法(名称非常混乱)

你想要

 public InsuranceMethod2() throws IOException{ //constructor
否则,您只会得到一个不做任何事情的默认构造函数

您还应该使从构造函数调用的所有方法都是私有的或至少是最终的

这不是一个构造函数。这只是一个方法(名称非常混乱)

你想要

 public InsuranceMethod2() throws IOException{ //constructor
否则,您只会得到一个不做任何事情的默认构造函数


您还应该将从构造函数调用的所有方法设置为私有的或至少是最终的。

public void InsuranceMethod2()抛出IOException{//constructor,将类名放在此处

上面的代码不是构造函数,因为它是一个方法声明。如果希望它是构造函数,请删除
void
,这样它看起来像这样:

public InsuranceMethod2()抛出IOException{…}

此外,您已经全局声明了变量,不需要在每个方法中再次声明它们,因为当您尝试引用该变量时,它将引用本地声明的变量而不是全局声明的变量,因此您将收到意外的结果


不过,作为提示,如果在全局变量声明和局部变量声明中有通用的字段名,则可以通过在全局变量前面加一个
this.
后缀来引用该全局变量。

public void InsuranceMethod2()抛出IOException{//构造函数,将类名放在此处

上面的代码不是构造函数,因为它是一个方法声明。如果希望它是构造函数,请删除
void
,这样它看起来像这样:

public InsuranceMethod2()抛出IOException{…}

此外,您已经全局声明了变量,不需要在每个方法中再次声明它们,因为当您尝试引用该变量时,它将引用本地声明的变量而不是全局声明的变量,因此您将收到意外的结果


不过,作为一个提示,如果您的全局变量声明和局部变量声明中有常见的字段名,那么您可以通过在全局变量前面加一个后缀来引用它。。

在您的代码中似乎有一些误解。为了回答您的直接问题,构造函数没有return类型(请参阅)。因此只需将构造函数(在您的示例中,它实际上是一个方法)更改为

为了解决其他误解(在哪里声明变量、样式等),我用注释重写了您的代码(查找LEBOLO)。有关样式的详细信息,最好只搜索“java代码样式”或“java代码约定”。我希望这对您有所帮助,并为您提供更多学习资源!祝您玩得开心

重写代码
代码中似乎存在一些误解。为了回答您的直接问题,构造函数没有返回类型(请参阅)。因此,只需将构造函数(在您的情况下,它实际上是一个方法)更改为

为了解决其他误解(在哪里声明变量、样式等),我用注释重写了您的代码(查找LEBOLO)。有关样式的详细信息,最好只搜索“java代码样式”或“java代码约定”。我希望这对您有所帮助,并为您提供更多学习资源!祝您玩得开心

重写代码
您在创建/结束构造函数时的注释是错误的,因为它是一个方法,而不是构造函数。事实上,所提供的代码中没有构造函数声明。正确缩进代码会使疑难解答更容易。@JoshM您所说的这部分:public void InsuranceMethod2()引发IOException{//constructor,将类名放在这里字符串carChoice;boolean insurable;int year;initialize();insureProcess();cleanUp();}//end constructor构造函数不应声明返回类型,因此请从构造函数名称之前删除void。@chrylis我没有被教导以任何其他方式缩进,但我当然愿意接受建议您的注释创建/结束构造函数是错误的,因为它是一个方法,而不是构造函数。事实上,没有构造函数声明在所提供的代码中进行缩进。正确缩进代码可以使故障排除更加容易。@JoshM您正在谈论的这部分:public void InsuranceMethod2()抛出IOException{//constructor,在此处放置类名字符串carChoice;boolean insurable;int year;initialize();insureProcess