【问题标题】:How do I return an element of an array in Java as a double?如何在 Java 中将数组的元素作为双精度返回?
【发布时间】:2016-07-23 07:11:10
【问题描述】:

我在下面的代码中不断收到一个错误,告诉我该类型必须是一个数组,但它在打印语句中为“total[agentnumber]”返回一个双精度值。任何人都可以解释这一点以及在这种情况下我如何解决它?

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

其他问题:这个设置有点疯狂,因为我不知道如何返回 for 循环的结果。假设我有兴趣最终为每个代理打印相当于 agent[agentnumber].money 的内容,我应该在哪里放置“return”以及应该返回什么。

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);
    }
}

【问题讨论】:

  • 询问错误时,请发布完整且准确的错误消息。
  • 看看你是如何使用total的。查看错误消息指示的代码行,看看一切是否有意义。更仔细地查看错误消息。
  • 我不认为这会因为多种原因编译。
  • total 是一个双精度数(即一个十进制数)。 total[agentnumber] 应该是什么意思?

标签: java arrays types


【解决方案1】:

total 是双精度,所以只需打印 totalout 而不是 total[agentnumber]

【讨论】:

    【解决方案2】:

    我在下面的代码中不断收到一个错误,告诉我该类型必须是一个数组,但它在 print 语句中为“total[agentnumber]”返回一个双精度值。任何人都可以解释这一点以及在这种情况下我如何解决它?

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

    我应该在哪里放置“return”以及应该返回什么,假设我有兴趣最终为每个代理打印相当于 agent[agentnumber].money 的内容。

    当您的程序现在编写时,您将收到一个错误,因为您已声明 bank() 将返回一个双精度值,但您在 bank() 中没有 return 语句。目前尚不清楚您为什么要从 bank() 返回任何内容。你可能想改变

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

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

    然后你就不需要返回任何东西了。

    【讨论】:

      【解决方案3】:

      我应该返回什么以及在哪里返回?

      您似乎只想打印出数组的值,因此不需要返回任何内容。在这种情况下,您可以使该方法具有 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);
          }
      }
      

      【讨论】:

        【解决方案4】:

        我已经尝试重写上面的代码并确保它可以编译。如果这不仅仅是我在 cmets 中添加的演示,我会更改一些最佳实践

        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);
                }
            }
        }
        

        【讨论】:

        • 对不起,忽略以上内容并阅读以下内容: 上述问题:(1)我试图在 120 次迭代后获得 agent[agentnumber].money 的罚款号码。但是,通过添加 TO 总数,这看起来像是重复计算。 IE。 agent[agentnumber].money 的最后一个值应该是我想要的,不是吗? (2) 我正在尝试打印 agent[agentnumber].money 的最终值。我曾认为使用“总计”可以让我这样做,但它反而表现出上述行为。在 System.out.print 语句中删除 total = total + 行并替换 total 会引发错误,但是...
        • 如果我正确理解了您的要求,那么答案代码现在应该可以满足您的需求。我已经将 total 移出循环并直接打印更新后的货币属性。
        猜你喜欢
        • 1970-01-01
        • 2018-12-30
        • 2011-02-23
        • 1970-01-01
        • 2018-04-01
        • 1970-01-01
        • 2011-01-02
        • 1970-01-01
        • 2016-03-11
        相关资源
        最近更新 更多