我相信这是一个愚蠢的问题,但我已经讨论了很久了。。我试图创建一个java程序,根据用户输入的年数和金额计算复利。但我一直遇到一个错误,void方法无法返回值。因此,我将方法切换为double,因为这是将返回的内容,但它告诉我double方法必须返回double。即使我在循环中返回一个双倍。。。请帮忙
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat("#.00");
**strong text**
Scanner reader = new Scanner(System.in); //creates scanner
System.out.println("Enter number of years until retirement: "); //asks user to input number of years until retirement
int Years = reader.nextInt();
if (Years <= 0) {
System.out.println("Please enter a valid number"); //if the number of years was invalid, exits the program and asks to enter a valid number
System.exit(0);
}
System.out.println("Enter amount of money able to save annually: "); //asks user how much money they can input
double MoneySaved = reader.nextInt();
reader.close(); //closes scanner
for(int i=0; i < Years; i++)
{
Total = MoneySaved * 1.05;
return Total;
}
System.out.println("You will have $" + df.format(TotalAmount) + " saved up by retirement");
}
}
首先,主Java方法必须是void,void方法不能返回值(即使编译器也会告诉您),尽管您可以使用return语句中断方法的执行并返回到调用方法。
所以要回答您的问题,您必须创建一个返回double的方法,然后只在主方法中打印它,或者不返回任何内容,只需替换
return Total;
具有
System.out.println("You will have $" + df.format(Total) + " saved up by retirement");
PS:看起来你对Java还是新手,所以首先阅读一些关于Java的内容,例如Official oracle教程
将方法设置为双精度并更改
double MoneySaved = reader.nextInt();
到
double MoneySaved = reader.nextDouble();
我也看不到你的“总计”声明;确保声明为double。
将您的更改为此
Double total = 0;
for(int i=0; i < Years; i++) {
total += MoneySaved;
total *= 1.05;
}
System.out.println(total);
当对进行stubbing时,我会得到以下关于用返回值对void方法进行stubbing的错误消息,尽管不是void。该错误似乎与有关,尽管我正在插入。 我的测试: 为什么会发生这种情况,我如何修复它?
我有以下问题:有一个计算两个整数之间相似性的布尔静态方法,我被要求返回4个结果: 在不更改方法的返回类型的情况下,它应该保持布尔值。 不更新/使用外部变量和对象的值
问题内容: 在哪里返回。这不会编译…我 几乎 可以理解为什么。但是,如果我想从一个空白中返回一个空白,为什么不呢?相反,我最终写了这样的东西: 我不是在寻找代码样式建议,我想知道为什么Java明确禁止这种类型的void返回。任何信息表示赞赏,谢谢。 问题答案: 带有表达式的return语句返回该表达式的值。的类型的是空隙表达-它不 具有 一个值。 从逻辑上讲,您想执行,然后返回-所以您必须说。这两
我注意到,在使用扫描仪时,如果我想设置定界符或区域设置等属性,那么这样做的方法会返回扫描仪对象本身: 我不明白的是,如果属性被更改(而不是创建新对象),为什么它返回一个扫描器对象而不是void?这并不是说我必须将返回值存储在一个变量中——事实上,如果我尝试这样做,就像下面的代码中那样,Eclipse将发出消息:“lineScanner”在此位置未关闭:
我正在等待(从USSD请求中)检索一个值,以便返回它(getUSSD):
在给定以下约束的情况下,是否可以以某种方式编译: 您不能向添加任何其他修饰符。 不包含或,您不能更改它。 无法将重写器添加到编译器管道。 您可以更改周围的其他所有内容。