在Java中使用自定义数据类型

时间:2012-12-07 21:51:13

标签: java

我是编程新手,我有一个编写名为Names的类的作业。在我的main方法中,我想读取整个名称并将其传递给我的Names构造函数。但是,在传递方法数据时,我一直遇到类型不匹配错误。我做错了什么?

import java.util.Scanner;
public class Names {
String first, middle, last;
    /**
     * @param args
     */
    public Names(){

    }
    public Names(String first, String middle, String last){
        first = this.first;
        middle = this.middle;
        last = this.last;
    }

    //returns the first name
    public String getFirst(){
        return first;
    }

    //returns the middle name
    public String getMiddle(){
        return middle;
    }
    //returns the last name
    public String getLast(){
        return last;
    }
    // Returns a string containing the person's full name in order,
    public String firstMiddleLast(){
        String ret = first + " " + middle + " " + last;
        return ret;
    }
    public String lastFirstMiddle(){
        String ret = last + ", " + first + " " + middle;
        return ret;
    }
    public boolean equals(Names otherName){
        if (first.equalsIgnoreCase(otherName.first) || middle.equalsIgnoreCase(otherName.middle) 
                || last.equalsIgnoreCase(otherName.last))
            return true;
        else
            return false;
    }
    public String initials(){
        String retVal = first.substring(0) + "." + middle.substring(0) + "." + last.substring(0) + ".";
        return retVal.toUpperCase();
    }
    public int length(){
        String wholeName = (first+middle+last);
        int retVal = wholeName.length();
        return retVal;
    }
    public static void main(String[] args) {
        Names person1 = new Names();
        Names person2 = new Names();
        Scanner scan = new Scanner(System.in);

        System.out.println("Enter First Name: ");
        person1.first = scan.next();

    }

}

2 个答案:

答案 0 :(得分:3)

首先,你的构造函数是向后的。这样做:

public Names(String first, String middle, String last){
    this.first = first;
    this.middle = middle;
    this.last = last;
}

this保留字总是指您正在使用的类/对象。因此,当您在this.first类中引用Names时,您指的是名字的第一个变量,而不是您首先命名的函数参数。

答案 1 :(得分:2)

  当我尝试将String首先传递给构造函数时,

第60行   Names(String first,String middle,String last)

我在发布的代码中没有看到任何编译时错误,但您的代码应该是这样的:

    System.out.println("Enter First Name: ");
    String firstname = scan.next();
     System.out.println("Enter Middle Name: ");
    String middlename = scan.next();
    System.out.println("Enter Last Name: ");
    String lastname = scan.next();

    Names person1 =new Names(firstname, middlename, lastname);

正如其他人所说,您的构造函数声明无效。

 public Names(String first, String middle, String last){
        this.first = first;
        this.middle = middle;
        this.last = last;
    }