扫描仪在给出最终输出之前请求多个输入

时间:2016-02-25 15:56:58

标签: java java.util.scanner

所以我是Java的新手,我正在尝试将一个变量从扫描器传递给我的getter / setter方法,这样根据输入的数字,它会对数组进行不同的排序。

我已经知道列表将排序的位置;问题是我的扫描仪重复,您必须在列表显示之前多次输入您的选择。

我知道问题与调用" int c = assign_6.choice()"有关。如果我对数字进行硬编码很好但是它似乎正在多次调用choice()函数。

我尝试将该功能移出main并删除我的setter / getter文件中的Comparable,同时删除快速排序并使用Array和Collections。这些都没有奏效。
我觉得这可能是一个愚蠢的错误,因为我不太了解Java而制作并错过了它。可以帮助解决这个问题。

这是我的输出:

nter number 1,2 or 3: 1
Enter number 1,2 or 3: 1
Enter number 1,2 or 3: 1
Enter number 1,2 or 3: 1
Enter number 1,2 or 3: 1
Enter number 1,2 or 3: 1
Enter number 1,2 or 3: 1
Enter number 1,2 or 3: 1
Enter number 1,2 or 3: 1
Enter number 1,2 or 3: 1
contacts [age=20, state=Alabama, firstname=Pickles, lastname=Cattle]
contacts [age=35, state=New York, firstname=George, lastname=Constanza]
contacts [age=90, state=Florida, firstname=Adam, lastname=Tree]
contacts [age=32, state=Illinois, firstname=Mary, lastname=Upton]
contacts [age=58, state=Washington, firstname=Bob, lastname=Wiseman]

代码:

    import java.util.Scanner;

public class test_6 {

    public static void main(String[] args) {


        Contacts[] a = {
                new Contacts(32, "Illinois", "Mary", "Upton"),
                new Contacts(58, "Washington", "Bob", "Wiseman"),
                new Contacts(20, "Alabama", "Pickles", "Cattle"),
                new Contacts(35, "New York", "George", "Constanza"),
                new Contacts(90, "Florida", "Adam", "Tree"),
                };

        Quick.sort(a);
        for (Contacts contacts:a){
            System.out.println(contacts);
        }
    }

    public static int choice() {
        System.out.print("Enter number 1,2 or 3: ");
        Scanner sc = new Scanner(System.in);
        int i = sc.nextInt();
        return i;
    }
}

    public class Contacts implements Comparable<Contacts>{

    Integer age;
    String state;
    String firstname;
    String lastname;
    int c = test_6.choice();

    public Contacts(Integer age, String state, String firstname, String lastname){
        this.age = age;
        this.state = state;
        this.firstname = firstname;
        this.lastname = lastname;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
        public int compareTo(Contacts contacts) {

            if (c == 1){
                return this.getLastname().compareTo(contacts.getLastname());
            }
            else if (c == 2){
                return this.getState().compareTo(contacts.getState());
            }
            else if (c == 3){
                return this.getAge().compareTo(contacts.getAge());
            }
            else return 0;

        }
        @Override
        public String toString() {
            return "contacts [age=" + age + ", state=" + state + ", firstname=" + firstname + ", lastname=" + lastname
                    + "]";
        }
}

2 个答案:

答案 0 :(得分:1)

我不完全确定,您可以调试,但它可能与您在全局范围内分配的功能有关。最好将静态函数choice()移动到Contacts类/对象。

然后从初始化程序choice()内部调用Contacts函数。例如:

import java.util.Scanner;

public class test_6 {

    public static void main(String[] args) {


        Contacts[] a = {
                new Contacts(32, "Illinois", "Mary", "Upton"),
                new Contacts(58, "Washington", "Bob", "Wiseman"),
                new Contacts(20, "Alabama", "Pickles", "Cattle"),
                new Contacts(35, "New York", "George", "Constanza"),
                new Contacts(90, "Florida", "Adam", "Tree"),
                };

        Quick.sort(a);
        for (Contacts contacts:a){
            System.out.println(contacts);
        }
    }

    //Function Choice Moved to Contacts.choice()
}

    public class Contacts implements Comparable<Contacts>{

    Integer age;
    String state;
    String firstname;
    String lastname;
    int c;

    public Contacts(Integer age, String state, String firstname, String lastname){
        this.age = age;
        this.state = state;
        this.firstname = firstname;
        this.lastname = lastname;
        this.c = choice();
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    public int compareTo(Contacts contacts) {

        if (c == 1){
            return this.getLastname().compareTo(contacts.getLastname());
        }
        else if (c == 2){
            return this.getState().compareTo(contacts.getState());
        }
        else if (c == 3){
            return this.getAge().compareTo(contacts.getAge());
        }
        else return 0;

    }
    public static int choice() {
        System.out.print("Enter number 1,2 or 3: ");
        Scanner sc = new Scanner(System.in);
        int i = sc.nextInt();
        return i;
    }
    @Override
    public String toString() {
        return "contacts [age=" + age + ", state=" + state + ", firstname=" + firstname + ", lastname=" + lastname
                + "]";
    }
}

答案 1 :(得分:1)

我没有足够的回复评论,但我觉得它可能是你的sc.nextInt()语句。尝试在返回之前调用sc.close(),看看是否能解决问题。