繁体   English   中英

读取用户输入到列表,根据元素值排序,并按顺序返回数组中的列表元素-Java

[英]Read user input to list, sort based on element value, and return list elements within array in order - Java

我的代码包含以下方面和目标:1)接受用户输入的三个设备2)将这些输入存储在列表中3)将列表存储在数组中4)根据较大的ROI值对数组内的列表进行排序(索引3)数组中每个列表的列表)5)以最大ROI的顺序返回数组中的列表

为此,我创建了三个类文件:Main,Equipment和Sort

我的问题:1)我的set()方法返回类型2的undefined错误)我的比较工具从升序返回值,但我需要从降序(最大到最小)

 import java.util.ArrayList; import java.util.List; import java.util.Collections; import java.util.*; public class Main { public static void main(String[] args) { Equipment equ1 = new Equipment("Name", 1.00, 2.00, 3.00); Equipment equ2 = new Equipment("Name", 1.00, 2.00, 3.00); Equipment equ3 = new Equipment("Name", 1.00, 2.00, 3.00); //Equipment Set 1 from User Input System.out.println("Enter Equipment Set 1 Name: "); Scanner input = new Scanner (System.in); String equName1 = input.nextLine(); equ1.set(0, equName1); System.out.println("Enter Equipment Set 1 Gain: "); Double equGain1 = input.nextDouble(); equ1.set(1, equGain1); System.out.println("Enter Equipment Set 1 Cost: "); Double equCost1 = input.nextDouble(); equ1.set(2, equCost1); double roi1 = (equGain1 - equCost1) / equCost1; equ1.set(3, roi1); //Place ROI at index 3 //Equipment Set 2 from User Input System.out.println("Enter Equipment Set 2 Name: "); String equName2 = input.nextLine(); equ2.set(0, equName2); System.out.println("Enter Equipment Set 2 Gain: "); Double equGain2 = input.nextDouble(); equ2.set(1, equGain2); System.out.println("Enter Equipment Set 2 Cost: "); Double equCost2 = input.nextDouble(); equ2.set(2, equCost2); double roi2 = (equGain1 - equCost1) / equCost1; equ2.set(3, roi2); //Equipment Set 3 from User Input System.out.println("Enter Equipment Set 3 Name: "); String equName3 = input.nextLine(); equ3.set(0, equName3); System.out.println("Enter Equipment Set 3 Gain: "); Double equGain3 = input.nextDouble(); equ3.set(1, equGain3); System.out.println("Enter Equipment Set 3 Cost: "); Double equCost3 = input.nextDouble(); equ3.set(2, equCost3); double roi3 = (equGain1 - equCost1) / equCost1; equ3.set(3, roi3); List<Equipment> equipment = new ArrayList<Equipment>(); equipment.add(equ1); //Add each list to the array list equipment.add(equ2); equipment.add(equ3); Collections.sort(equipment, new Sort()); System.out.println(equipment); } } 

设备.java

 public class Equipment { //This class seeks to define the elements and the structure of Equipment String equName; double equGain; double equLoss; double roi; public Equipment(String equName, double equGain, double equLoss, double roi) { this.equName = equName; this.equGain = equGain; this.equLoss = equLoss; this.roi = roi; } public String toString() { return "Equipment: " + equName + " Gain: " + equGain + "Loss: " + equLoss + "ROI: " + roi; } } 

Sort.java

 import java.util.Comparator; public class Sort implements Comparator<Equipment> { //Implementing a comparison tool for lists @Override public int compare(Equipment o1, Equipment o2) { //I want to compare one list to another - Update from Java 8 return Double.compare(o1.getroi() - o2.getroi()); //I want to compare the ROI value of each list } } 

您的主要问题是缺乏面向对象编程的知识。 我建议您了解此范例的工作原理。 您的代码中有多个问题,因此请逐步解决:

对于第一个问题,您似乎没有为模型定义setter和getter方法。 定义它们并使类的属性私有。

public class Equipment {
    private String equName;
    private double equGain;
    private double equLoss;
    private double roi;

    public Equipment() {
    }

    public Equipment(String equName, double equGain, double equLoss, double roi) {
        this.equName = equName;
        this.equGain = equGain;
        this.equLoss = equLoss;
        this.roi = roi;

    }

    public String getEquName() {
        return equName;
    }

    public void setEquName(String equName) {
        this.equName = equName;
    }

    public double getEquGain() {
        return equGain;
    }

    public void setEquGain(double equGain) {
        this.equGain = equGain;
    }

    public double getEquLoss() {
        return equLoss;
    }

    public void setEquLoss(double equLoss) {
        this.equLoss = equLoss;
    }

    public double getRoi() {
        return roi;
    }

    public void setRoi(double roi) {
        this.roi = roi;
    }

    public String toString() {
        return "Equipment: " + equName + " Gain:  " + equGain + "Loss: " + equLoss + "ROI: " + roi;
    }
}

您的比较器方法使用Double.compare(double obj1,double obj2)进行比较。 您使用的方法错误。 您不必彼此减去两个双打。 您将两个double值作为method的参数。 您应该交换方法参数以获取升序或降序:例如:

Double.compare(obj1.getRoi(),obj2.getRoit()) --> ascending order
Double.compare(obj2.getRoi(),obj1.getRoit()) --> descending order

排序类

import java.util.Comparator;

public class Sort implements Comparator<Equipment> { //Implementing a comparison tool for lists
    @Override
    public int compare(Equipment o1, Equipment o2) { //I want to compare one list to another - Update from Java 8
        return Double.compare(o2.getRoi(), o1.getRoi());
    }
}

在您的主体中,您混淆了变量。 对于每个用户输入,您计算的第一个对象是ROI而不是其他对象。 除它们之外,set方法应替换为每个Equipment属性的setter方法。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ArrayTest {

    public static void main(String[] args) {

        Equipment equ1 = new Equipment();
        Equipment equ2 = new Equipment();
        Equipment equ3 = new Equipment();

        //Equipment Set 1 from User Input
        System.out.println("Enter Equipment Set 1 Name: ");
        Scanner input = new Scanner(System.in);
        String equName1 = input.nextLine();
        equ1.setEquName(equName1);

        System.out.println("Enter Equipment Set 1 Gain: ");
        Double equGain1 = input.nextDouble();
        equ1.setEquGain(equGain1);

        System.out.println("Enter Equipment Set 1 Cost: ");
        Double equCost1 = input.nextDouble();
        equ1.setEquLoss(equCost1);

        double roi1 = (equGain1 - equCost1) / equCost1;
        equ1.setRoi(roi1); //Place ROI at index 3

        //Equipment Set 2 from User Input
        System.out.println("Enter Equipment Set 2 Name: ");
        String equName2 = input.nextLine();
        equ2.setEquName(equName2);

        System.out.println("Enter Equipment Set 2 Gain: ");
        Double equGain2 = input.nextDouble();
        equ2.setEquGain(equGain2);

        System.out.println("Enter Equipment Set 2 Cost: ");
        Double equCost2 = input.nextDouble();
        equ2.setEquLoss(equCost2);

        double roi2 = (equGain2 - equCost2) / equCost2;
        equ2.setRoi(roi2);

        //Equipment Set 3 from User Input
        System.out.println("Enter Equipment Set 3 Name: ");
        String equName3 = input.nextLine();
        equ3.setEquName(equName3);

        System.out.println("Enter Equipment Set 3 Gain: ");
        Double equGain3 = input.nextDouble();
        equ3.setEquGain(equGain3);

        System.out.println("Enter Equipment Set 3 Cost: ");
        Double equCost3 = input.nextDouble();
        equ3.setEquLoss(equCost3);

        double roi3 = (equGain3 - equCost3) / equCost3;
        equ3.setRoi(roi3);

        List<Equipment> equipment = new ArrayList<>();
        equipment.add(equ1); //Add each list to the array list
        equipment.add(equ2);
        equipment.add(equ3);

        equipment.sort(new Sort());
        System.out.println(equipment);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM