#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:
- удалить
return amount
из его собственной области - метод
futureInvestmentValue
… Вы не можете изменить ни один из параметров внутри метода, поэтому вам нужно объявить другую переменную, кроме amount внутри метода (возможно, этоtemp
переменная, которую вы продолжаете использовать), и вернуть ее вместо этого -
когда вы возвращаете что-либо, оператор 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; } }