проблема возврата для метода

#java #return

#java #Возврат

Вопрос:

У меня возникла проблема с методом, возвращающимся к основному методу. В нем говорится, что сумма в «возвращаемой сумме» не может быть преобразована в переменную. Где я ошибаюсь в этом??

Это сообщение, которое я получаю: несколько маркеров в этой строке — Методы Void не могут вернуть значение — сумма не может быть преобразована в переменную

Вот код:

 import java.util.Scanner;

public class Investment {
    public static void main(String[]args) {
        Scanner input = new Scanner(System.in);

        System.out.print("Enter the amount invested: ");
        double amount = input.nextDouble();

        System.out.print("Enter the annual interest rate: ");
        double interest = input.nextDouble();

        int years = 30;

        System.out.print(futureInvestmentValue(amount, interest, years)); //Enter output for table
    }

    public static double futureInvestmentValue(double amount, double interest, int years) {

        double monthlyInterest = interest/1200;
        double temp;
        double count = 1;

        while (count < years)
            temp = amount * (Math.pow(1   monthlyInterest,years *12));
        amount = temp;

        System.out.print((count   1)   " "   temp);
    }

    {
        return amount;
    }
}
  

Комментарии:

1. Попробуйте сделать отступ в своем коде. Облегчает чтение.

2. вы не можете вернуть что-либо из основного метода. удалите возврат и выведите какое-либо сообщение или ошибку.

3. Пожалуйста, добавьте соответствующие теги и сделайте отступ в своем коде.

4. Чему вы учитесь???

5. Вы внесли изменения в свой код, которые привели к путанице в вашем первоначальном вопросе. На данный момент я не уверен, о чем вы спрашиваете.

Ответ №1:

Ваши фигурные скобки неверны. Компилятор — и я — были смущены этим.

Это должно сработать (по крайней мере, синтаксически):

 import java.util.Scanner;

public class Investment {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("Enter the amount invested: ");
        double amount = input.nextDouble();

        System.out.print("Enter the annual interest rate: ");
        double interest = input.nextDouble();

        int years = 30;

        System.out.print(futureInvestmentValue(amount, interest, years));
    }

    public static double futureInvestmentValue(
            double amount, double interest, int years) {

        double monthlyInterest = interest / 1200;
        double temp = 0;
        double count = 1;

        while (count < years)
            temp = amount * (Math.pow(1   monthlyInterest, years * 12));
        amount = temp;

        System.out.print((count   1)   " "   temp);

        return amount;
    }
}
  

Комментарии:

1. Его не обязательно объявлять в этом блоке; внешняя область видимости видна.

2. Нет, я думаю, вы были правы; я неправильно прочитал исходный код — его вообще не было внутри метода.

3. Хорошо, итак, у меня есть фигурные скобки, как вы заметили, но теперь это говорит мне, что temp не был инициализирован. Он отмечает это внутри цикла while. Я не уверен, что это значит.

4. @user1019838: temp должен быть инициализирован (получить начальное значение), как double temp = 0; потому что у него нет значения по умолчанию

Ответ №2:

Для начала удалите amount из его собственной области видимости. Также из метода futureInvestmentValue вы принимаете amount в качестве аргумента, но значение никогда не изменяется, поэтому вы возвращаете то же самое передаваемое значение, которое, скорее всего, не является желаемым результатом.

Ответ №3:

  1. удалить return amount из его собственной области
  2. метод futureInvestmentValue … Вы не можете изменить ни один из параметров внутри метода, поэтому вам нужно объявить другую переменную, кроме amount внутри метода (возможно, это temp переменная, которую вы продолжаете использовать), и вернуть ее вместо этого
  3. когда вы возвращаете что-либо, оператор return всегда находится внутри метода. Никогда не выходите за его пределы, находясь внутри его собственных фигурных скобок (никогда не видел этого раньше …)

     import java.util.Scanner;
    
    public class Investment {
        public static void main(String[]args) {
            Scanner input = new Scanner(System.in);
    
            System.out.print("Enter the amount invested: ");
            double amount = input.nextDouble();
    
            System.out.print("Enter the annual interest rate: ");
            double interest = input.nextDouble();
    
            int years = 30;
    
            System.out.print(futureInvestmentValue(amount, interest, years)); //Enter output for table
        }
    
        public static double futureInvestmentValue(double amount, double interest, int years) {
    
            double monthlyInterest = interest/1200;
            double temp;
            double count = 1;
    
            while (count < years) {
                temp = amount * (Math.pow(1   monthlyInterest,years *12));
                System.out.print((count   1)   " "   temp);
            }
    
            return amount;
        }
    }