2016-04-03 2 views
-3

Я продолжаю получать ошибку в нижнем коде, котирующем меня, что тип должен быть массивом, но возвращающим двойным для «total [agentnumber]» в заявлении печати. Может ли кто-нибудь объяснить это и как я могу решить это в этом контексте?Как вернуть элемент массива в Java как двойной?

Моя цель: Напишите код, в который вводится количество периодов, процентных ставок и количество агентов (где каждому агенту присваивается главный член, равный его номеру агента, т.е. агент 1 получает 100, агент 2 получает 200 и т. Д.) и распечатать балансы каждого агента. Я хочу сделать это в цикле, а не использовать формулу составных процентов, потому что я пытаюсь научиться использовать Java.

Другая проблема: это немного безумно настроено, потому что я не знаю, как вернуть результаты циклов for. Где я должен помещать «возврат» и что я должен возвращать, полагая, что меня интересует, в конечном счете, печать эквивалента агента [номер агента] .money для каждого из агентов.

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].

Где я должен помещать «возврат» и что я должен возвращать, полагая, что меня интересует, в конечном счете, печать эквивалента агента [номер агента] .money для каждого из агентов.

Как ваша программа написана прямо сейчас, вы получите сообщение об ошибке, потому что вы заявили, что 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. Также не совсем понятно, зачем вам нужен массив, потому что локальная переменная agents не нужна методом main, поэтому, если вам нужен массив, вы должны вернуть 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) Я пытаюсь получить штраф за агент [номер агента] .money после 120 итераций. Тем не менее, похоже, что это двойной подсчет, добавив, что TO total. То есть последнее значение агента [agentnumber] .money должно быть тем, что я хочу, нет? (2) Я пытаюсь напечатать окончательное значение агента [номер агента] .money. Я думал, что использование «total» позволило бы мне это сделать, но вместо этого продемонстрировать вышеизложенное. Удаление итоговой суммы = итоговая строка и замена общего количества в отчете System.out.print вызывает ошибку, однако ... – user3614648

+0

Если я правильно понимаю ваш запрос, код ответа должен теперь делать то, что вы хотите. Я переместил итог из цикла, и я печатаю обновленную денежную собственность напрямую. – Andy