2016-04-03 53 views
-3

在下面的代码中,我不断收到一个错误,说明该类型必须是一个数组,但是它在print语句中返回一个double [“total [agentnumber]”)。任何人都可以解释这一点,我可以在这种情况下解决它吗?如何返回Java中数组的元素作为double?

我的目标是:在代码输入周期数,利率和代理人数量(每个代理人被分配一个等于其代理人数量的委托人,即代理人1收到100,代理人收到200等等) )并打印每个代理商的余额。我想在循环中执行此操作,而不是使用复合兴趣公式,因为我正在尝试学习如何使用Java。

其他问题:这是有点疯狂的设置,因为我不知道如何返回for循环的结果。我应该在哪里放置“退货”,以及我应该返还什么,假设我有兴趣最终为每个代理打印代理[代理号码]。货币的等价物。

public class Person{ 

    public double money; // initialize 

    Person(double cash){ 
     money = cash; 
    } 
} 
public class Bank { 

    public static double bank(double rate, double periods, int agents){ 
     Person[] agent = new Person[agents]; 
     double total; 

     for(int agentnumber = 0; agentnumber < agents; agentnumber++) { 
      agent[agentnumber] = new Person((agentnumber+1)*100); // assign starting incomes and instantiate players 

      for(int months = 0; months < periods; months++){ 
       agent[agentnumber].money = agent[agentnumber].money*(1.0 + rate); 
       total = agent[agentnumber].money; 
       System.out.println("The total balance of player " + agentnumber + " is " + total[agentnumber]); 
      } 
     } 
    } 

    public static void main(String[] args) { 
     bank(0.05,120,3); 
    } 
} 
+1

已经添加了当询问错误,发布完整和准确的错误信息演示我会改变。 –

+0

看看你如何使用'total'。查看错误消息指示的代码行,看看是否一切都合理。仔细查看错误消息。 –

+3

我不认为这会编译出于多种原因。 –

回答

0

total是双,所以只是打印total出来,而不是total[agentnumber]

0

我一直在下面的代码时收到错误告诉我,类型必须是一个数组,但它在打印声明中返回了“total [agentnumber]”的两倍。任何人都可以解释这一点,我可以在这种情况下解决它吗?

您会收到此错误消息,因为total是双精度数组,而不是数组。为了使用[],该类型必须是数组。解决方法是打印total而不是total[agentnumber]

我应该在哪里放置“退货”以及我应该返回什么,假设我有兴趣最终为每个代理打印代理[代理号码]。货币的等价物。

当你的程序是正确的,现在写的,你会得到一个错误,因为你已经宣布bank()将返回了一倍,但你有没有return声明bank()。目前还不清楚为什么你想从bank()返回任何东西。你可能想改变

public static double bank(double rate, double periods, int agents) 

public static void bank(double rate, double periods, int agents) 

,然后你不需要任何回报。

0

什么和我应该在哪里返回?

您似乎只是想打印出数组的值,所以没有必要返回。在这种情况下,您可以使该方法具有void返回类型。这也不是很清楚为什么你需要阵列,因为main方法不需要本地agents变量,所以如果你确实需要阵列,你应该返回Person[]而不是double ...

你也可以像这样清理代码。

public class Bank { 

    public static Person[] bank(double rate, double periods, int agents){ 
     Person[] agent = new Person[agents]; 

     for(int agentnumber = 0; agentnumber < agents; agentnumber++) { 
      Person p = new Person((agentnumber+1)*100); // assign starting incomes and instantiate players 

      for(int months = 0; months < periods; months++){ 
       p.money = p.money*(1.0 + rate); 
       System.out.printf("The total balance of player %d at month %d is %.2f\n", agentnumber, months, p.money); 
      } 

      agent[agentnumber] = p; 
     } 

     return agent; 
    } 

    public static void main(String[] args) { 
     Person[] agents = bank(0.05,120,3); 
    } 
} 
0

我已经去重写了上面的代码,并确保它编译。有一些最佳实践的事情,如果这不只是我的意见

public class Bank { 

    public static void main(String[] args) { 
     Bank bank = new Bank(0.05,120,3); 
    } 

    // For readability and simplification I would make this public and 
    // move it into it's own file called Person.java 
    private class Person { 
     public double money; 

     Person(double cash){ 
      money = cash; 
     } 
    } 

    public Bank(double rate, double periods, int numberOfAgents) { 
     Person[] agent = new Person[numberOfAgents]; 

     // Typical java convention is to use camel case so 
     // agentnumber would become agentNumber 
     for(int agentnumber = 0; agentnumber < numberOfAgents; agentnumber++) { 
      agent[agentnumber] = new Person((agentnumber+1)*100); 

      for(int months = 0; months < periods; months++){ 
       agent[agentnumber].money = agent[agentnumber].money*(1.0 + rate); 
      } 
      System.out.println("The total balance of player " + agentnumber + " is " + agent [agentnumber].money); 
     } 
    } 
} 
+0

对不起,忽略以上内容并阅读此:与上述问题: (1)我试图在120次迭代后获得代理[代理号码]。货币的罚款号码。然而,看起来这是通过增加TO来重复计算。即代理[agentnumber] .money的最后一个值应该是我想要的,不是? (2)我正在尝试打印代理[agentnumber] .money的最终值。我曾经想过,使用'total'会让我做到这一点,但它会展现出上面的行为。删除Total = total +行并替换System.out.print语句中的总数会引发错误,但是... – user3614648

+0

如果我正确理解您的请求,则答案代码现在应该按照您的要求做。我已经将整体移出循环,并直接打印更新的货币属性。 – Andy