当前位置: 首页 > 知识库问答 >
问题:

从另一个类调用方法排序

宰父熙云
2023-03-14

我正在开发一个程序,在这个程序中,我必须调用一个提示用户从另一个类输入数据的方法。这个程序应该打印客户的姓名、年龄、地址和性别。然而,我在调用一个输入每个客户信息的方法时遇到了问题。

此外,我还必须创建一种方法,将客户的年龄按升序排序。因此,该程序根据年龄从(最年轻的客户)到(最老的客户)的顺序打印出所有信息。我不知道如何创建一种只对客户年龄进行排序而不对姓名、地址和性别进行排序的方法。如果您有任何反馈或意见,我将不胜感激!

这就是我目前所拥有的。

    import java.util.Scanner;
  public class Customer1 {
        public  static void main(String [] args){

        Scanner input = new Scanner(System.in);
        int x;

        System.out.print("Total number of customers: ");
        x = input.nextInt();

        Customer [] person = new Customer[x];


        System.out.println("Name" + "     " + "Age"+ "       " + "Address" +  "     " + "Gender");

        for(int i = 0; i < person.length; i++){
            System.out.println(person.toString());
        }


        }
}



class Customer{

        String name;
        int age;
        String address;
        String gender;

        public Customer(String newName, int newAge, String newAddress, String newGender){
            name = newName;
            age = newAge;
            address = newAddress;
            gender = newGender;

        }

        public void data(Customer [] person){

            Scanner input = new Scanner(System.in);

            for(int i = 0; i < person.length; i++){

                System.out.print("Name: ");
                name= input.toString();

                System.out.print("Age: ");
                age = input.nextInt();

                System.out.print("Address: ");
                address= input.toString();

                System.out.print("Gender: ");
                gender = input.toString();


            }
        }

        /*This is the "uncompleted" method that I tried to create in order to sort  the ages of customers.
         But I don't know how to use it in  order to sort only the ages*/
        public void sort(Customer [] person){

          double temp;
          for(int a = 0; a < (person.length - 1); a++){

                    for( int b = (a + 1); b < person.length; b++){
                            if(person[a] > person[b]){

                                    temp = person[a];
                                    person[a] = person[b];
                                    person[b] = temp;

                            }


                    }


            }


        }

        public String toString(){

            String result;
            result = name + "       " + age + "           " +  address +  "       " + gender;
            return result;
        }
}

共有3个答案

奚飞星
2023-03-14

1.获取您需要的数据

目前在你的Customer1课程中,你接受用户输入提供的x数量的客户。接下来,您将为xCustomer对象创建一个数组。您当前没有使用任何数据填充阵列。

Customer[] person = new Customer[x];

在这一行之后,您可以使用以下命令执行for循环:

        String name;
        int age;
        String address;
        String gender;
        for( int i = 0; i < person.length; i++ )
        {
            System.out.print("Name: ");
            name = input.next();

            System.out.print("Age: ");
            age = input.nextInt();

            System.out.print("Address: ");
            address= input.next();

            System.out.print("Gender: ");
            gender = input.next();

            person[i] = new Customer( name, age, address, gender );
        }

必须在代码中观察cavaet,您已经输入了input。toString()。这将为您提供扫描仪的字符串表示,而不是输入<代码>输入。next()将以字符串形式为您提供下一个输入。

2.排序

我建议查看比较器文档。有一个comparator对象,它实现了comparator,类型参数为Customer。覆盖比较以检查每个客户对象的年龄。

例如:

class CustomerComparator implements Comparator<Customer>
{
    @Override
    public int compare(Customer a, Customer b)
    {
        return a.age < b.age ? -1 : a.age == b.age ? 0 : 1;
    }
}

你应该考虑将变量名称年龄地址性别私有化,并使用getX()方法(getter/setters)。

轩辕煌
2023-03-14

请尝试以下可能解决此问题的代码。。我已经包括了之前回复中建议的方法,并创建了这个程序。。

import java.util.Scanner;

public class ReadSortCustomerData {

    public static void main(String [] args) {
    int numberOfCustomers;
    Scanner input = new Scanner(System.in);
    System.out.print("Enter the total number of customers: ");
    numberOfCustomers = input.nextInt();

    CustomerData [] customer = new CustomerData[numberOfCustomers];

    for(int countCustomer=0 ; countCustomer < numberOfCustomers; countCustomer++) {

        System.out.println("Enter the name of the"+(countCustomer+1)+"customer");
        customer[countCustomer].setName(input.next());
        System.out.println("Enter the age of the"+(countCustomer+1)+"customer");
        customer[countCustomer].setAge(input.nextInt());
        System.out.println("Enter the gender of the"+(countCustomer+1)+"customer");
        customer[countCustomer].setGender(input.next());
        System.out.println("Enter the address of the"+(countCustomer+1)+"customer");
        customer[countCustomer].setGender(input.next());
    }


  }

    public CustomerData[] sortCustomerData(CustomerData[] customers) {

        for (int i=0;i<customers.length;i++) {

            for(int j=i+1;j<customers.length;j++) {

                if(ageCompare(customers[i], customers[j])==1) {
                    CustomerData tempCustomer = new CustomerData();
                    tempCustomer = customers[i];
                    customers[i] = customers[j];
                    customers[j] = tempCustomer;
                }

                }
            }

        return customers;
    }

    public int ageCompare(CustomerData a, CustomerData b)
    {
        return a.getAge() < b.getAge() ? -1 : a.getAge() == b.getAge() ? 0 : 1;
    }
}




import java.util.Comparator;
import java.util.Scanner;


public class CustomerData {

    private String name;
    private int age;
    private String address;
    private String gender;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }

}

这可能需要在运行期间进行一些调整,但应该会给您一个良好的开端。

高钱青
2023-03-14

我建议你重新思考一下你的代码,看看下面的提示

使用比较器或可比接口

这些接口帮助您对集合、列表等进行排序,例如,比较器接口允许您通过Collections.sort和Arrays.sort操作对集合进行排序。

必须基于目标类(Person)定义Comparator的实现,然后根据需要的任何字段定义排序:

class PersonSort implements Comparator<Person>{

@Override
public int compare(Person p1, Person p2) {
    return p1.getAge() - p2.getAge();
}}

然后,您可以通过Arrays.sort(T[],比较器)强制其排序:

Arrays.sort(yourArray, new PersonSort());

我还建议您看看Oracle的Collection Framework教程。您将找到有关订购、实施等方面的信息。

 类似资料:
  • 问题内容: 在Python中,有没有一种方法可以从另一个类中调用一个类方法?我正在尝试在Python中旋转自己的MVC框架,但无法弄清楚如何从另一个类的一个类调用方法。 这是我想发生的事情: 我正在从PHP慢慢进入Python,因此我正在寻找与PHP等效的Python 。 问题答案: 更新:刚刚在您的帖子中看到了对它的引用。那不一样。用于获取函数对象,然后使用您的参数调用它 现在是一个实际的函数对

  • 问题内容: 我正在研究一个问题,但由于刚开始学习Java而感到非常困惑。我可以理解的任何帮助都会很棒。我必须编写一个具有两个类的程序。主类将从文件中读取内容,并使用第二类来查找文件中相同单词被重复的次数,然后将它们添加到包含单词和单词重复次数的数组中。我可以阅读文件部分。我只是似乎不知道如何从第二个类调用方法以将单词添加到数组并增加计数器。到目前为止,这是我的代码,如果您运行它,您将看到多少错误会

  • 问题内容: 我知道这个问题是重复的,但是我在Internet上找不到答案。 我想从另一个类调用一个方法。 我有Class1和Class2。 在第2类中,我具有该方法: 我想从Class1调用该方法。 感谢您的任何答复。 - - 编辑 - - -— LogCat– 问题答案: 您应该使用以下代码: 如果您不想创建一个新的实例来调用该方法,则可以将方法标为十进制,然后只需调用即可。

  • Java,我们可以从另一个类调用main()方法吗?例如,ClassA应该在命令行上运行,因为它定义了main(String[]args)方法。 我想把这个叫做ClassA,在ClassB里面。是否初始化类的新对象,如 或者是否有一种方法可以在ClassB中传递ClassA的命令行选项。 谢啦

  • 嗨我正在努力解决我面临的问题 我想做的是调用test1类的zahl方法 这是我尝试过的,但它什么也没有返回,即使它应该显示我的错误。

  • 我创建了两个类:和。下面是进行计算的方法: 这里是一个调用并显示结果的函数,不幸的是,我无法根据这本书要求它运行的方式来运行它。 任何提示都会帮助我在我的再教育过程中。