- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
好的,这是我的问题。我试图比较 ArrayList 中两个或多个销售代表的年销售额,但得到了一些我无法弄清楚的奇怪结果。我必须对两者进行比较,然后告诉用户销售额较低的代表需要销售多少才能取得领先地位。我把它分成三类。但我很确定这一行为仅取决于其中两个。第一个是:
import java.util.ArrayList;
/**
*
* @author Cameron
*/
public class SalesRep {
private ArrayList<CompensationCalculator> pool;
public SalesRep(){
pool = new ArrayList<>();
}
public void setPool(ArrayList<CompensationCalculator> pool){
this.pool = pool;
}
public ArrayList<CompensationCalculator> getPool(){
return pool;
}
public void addToPool(CompensationCalculator salesRep){
pool.add(salesRep);
}
public String toString(String report){
double diff;
for(int i=0; i<pool.size(); i++){
if (pool.get(i).getSales() < pool.get(i++).getSales()){
diff = pool.get(i++).getSales() - pool.get(i).getSales();
report = pool.get(i).getName() + "needs to sell " +
diff + " to take the lead.";
}
if (pool.get(i).getSales() > pool.get(i++).getSales()){
diff = pool.get(i).getSales() - pool.get(i++).getSales();
report = pool.get(i++).getName() + "needs to sell " +
diff + " to take the lead.";
}
}
return report;
}
}
该类应比较数组中的两个代表,而该类将其显示给用户:
import java.util.Scanner;
public class AnnualSales {
public static void main(String[] args){
CompensationCalculator test = new CompensationCalculator(); //Creates a new instance of the class
SalesRep testName = new SalesRep(); //Creates a new instance of the SalesRep class
String cont = new String(); //A string to represent if there ar emore names to be added
Scanner scan = new Scanner(System.in); //Allows for user input to be read
while (!cont.equalsIgnoreCase("n")){
System.out.println("What is the name of the sales representative? ");
test.setName(scan.next());
System.out.println("Please enter " + test.getName() +
"'s annual sales: ");
test.setSales(scan.nextDouble());
testName.addToPool(test);
System.out.println("Are there any more sales representatives you "
+ "would like to add? ");
cont = scan.next();
}
System.out.print(testName.getPool());
System.out.print(testName.toString());
}
}
现在没有发现错误,程序编译和执行没有问题。但结果我得到了
`[补偿计算器.补偿计算器@55f96302,补偿计算器.补偿计算器@55f96302]补偿计算器.SalesRep@3d4eac69'
我非常困惑,并且已经研究这个方法三个小时了,所以我确信我需要一双新的眼睛。任何帮助或指导都会很棒。
编辑:
好的,您使用比较器的建议绝对有帮助。我也对不必要的代码感到困惑,所以我对它进行了一些修改,现在除了一个方面之外它正在工作。这是我更改的代码:
public String compare(SalesRep rep1, SalesRep rep2){
NumberFormat fmt = NumberFormat.getCurrencyInstance();
Double diff;
if (rep1.getSales() > rep2.getSales()){
diff = rep1.getSales() - rep2.getSales();
return rep2.getName() + " needs to sell " + fmt.format(diff) +
" to take the lead.";}
else{
diff = rep2.getSales() - rep1.getSales();
return rep1.getName() + " needs to sell " + fmt.format(diff) +
" to take the lead.";}
}
我还重命名了我的类(class),以便更好地组织它们以适应新的要求。现在唯一的问题是,它给出的两次销售额的差异为 0.0 美元,这与我输入的内容无关。我是否错误地调用了每个对象的销售?我觉得我以前遇到过这个问题,但回顾我过去的代码并没有突出显示我做错了什么。
最佳答案
我没有看到您调用 toString(String)
,而只调用 toString()
,这就是为什么您会得到“stange”输出。
顺便说一句,toString(String)
方法的 report
参数看起来很奇怪,因为除了赋值之外,您没有使用它。在这种情况下,您应该使用局部变量。
另一个潜在的错误:
if (pool.get(i).getSales() > pool.get(i++).getSales()){
diff = pool.get(i).getSales() - pool.get(i++).getSales();
report = pool.get(i++).getName() + "needs to sell " +
diff + " to take the lead.";
}
这里您将 i
递增三倍,因此您将引用 pool
中的 3 个不同索引。假设i = 0
,那么你会得到:
//the first i++ returns i (0) and then increments i to 1
if (pool.get(0).getSales() > pool.get(0).getSales()){
//here i is 1, thus the next i++ returns 1 and increments i to 2
diff = pool.get(1).getSales() - pool.get(1).getSales();
//here i is 2, so the next i++ returns 2 and increments i to 3
report = pool.get(2).getName() + "needs to sell " +
diff + " to take the lead.";
}
因此,在第二种情况下,您需要将 3 添加到 i
中,从而使循环前进 4,因为循环头部中的 i++
也会再次递增 i。我建议您在循环体中使用 i + 1
而不是 i++
。
除此之外,您的设计非常奇怪,因为类 CompensationCalculator
实际上似乎定义了销售代表。
另一件事:我可能会按降序对销售代表列表进行排序(提示:使用比较器
)。那么元素 0 将是销售额最高的销售代表,最后一个元素将是销售额最低的销售代表。差异计算将是小菜一碟。
关于java - 尝试比较 Java 数组列表中的代表销售额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25601376/
我正在使用 Chart.js 创建图表。我在数据库中存储了一些日期和销售额。在这里,我使用 ajax 请求从数据库中选取记录,并通过将数据划分为两个不同的数组 date["2017-12-18","2
我正在尝试创建一个销售报告,用户可以在其中查看每天、每周和每月的销售额。 这是我的 table : CREATE TABLE IF NOT EXISTS `sales_act` ( `id`
我有一张包含 customer_number、week 和 sales 的表。我需要检查每个客户是否连续 12 周没有销售,并创建一个 0/1 的标志。 我可以检查过去 12 周或特定时间范围,但
我尝试了一些方法,到目前为止,这是唯一没有抛出错误的方法,但结果不会在我的页面上回显,所以我不太确定发生了什么。 $query = "SELECT SUM(sales.total) AS sales_
我是一名优秀的程序员,十分优秀!