当前位置: 首页 > 知识库问答 >
问题:

Void方法不能返回值-Java

潘志国
2023-03-14

我相信这是一个愚蠢的问题,但我已经讨论了很久了。。我试图创建一个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");



        }
    }

共有3个答案

郑正阳
2023-03-14

首先,主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教程

盖辉
2023-03-14

将方法设置为双精度并更改

double MoneySaved = reader.nextInt();

double MoneySaved = reader.nextDouble();

我也看不到你的“总计”声明;确保声明为double。

章晗日
2023-03-14

将您的更改为此

    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):

  • 在给定以下约束的情况下,是否可以以某种方式编译: 您不能向添加任何其他修饰符。 不包含或,您不能更改它。 无法将重写器添加到编译器管道。 您可以更改周围的其他所有内容。