--- in已在main(java.lang.String [])中定义---错误消息驱动我MAD

时间:2012-02-13 02:05:23

标签: java

我是第一个编程模块的学生。我工作的教科书是“适合所有人的Java”,Cay Horstmann。我在第2.4章 - 常数。我直接从书中复制并检查了(超过15次!)代码,但是每次编译它都会产生编译错误 in已在main(java.lang.String [])中定义

它突出显示扫描仪输入=新扫描仪(System.in); 作为问题。我写了另一个非常简单的程序,其中还包括 Scanner in = new Scanner(System.in); ,我遇到了完全相同的问题。

我试图找到解决方案,我重新安装了Java JDK和BlueJ(编译器),但没有任何效果。我用Google搜索了问题,但我找不到任何与我的问题相符的内容。我是一个Java处女,所以说实话,找出我应该看的地方很难。

非常感谢任何帮助。我已经落后了几个星期,这让我的进步大大增加。

提前感谢您提出的任何建议。

一切顺利,

维基

import java.util.Scanner;

public class Volume2 
{

    public static void main(String[] args)
    {

        final double BOTTLE_VOLUME = 2;  
        final double LITRES_PER_OUNCE = 0.0296; 
        final double CAN_VOLUME = 12 * LITRES_PER_OUNCE; 

        System.out.print("Please enter quantity of bottles: ");

        Scanner in = new Scanner(System.in);

        int bottles = in.nextInt();

        double totalVolume = totalVolume * BOTTLE_VOLUME;

        System.out.print("Please enter the number of cans: ");

        **Scanner in = new Scanner(System.in);** // This is highlighted as being the problem

        int cans = in.nextInt();

        double additionalVolume = cans * CAN_VOLUME;

        totalVolume = totalVolume + additionalVolume;

        System.out.print("The total volume is: ");
        System.out.println(totalVolume);

    }
}

错误消息: in已在main(java.lang.String [])中定义


3 个答案:

答案 0 :(得分:3)

因此错误消息完全正确 - 您已经在错误行前面有几行in。在您的具体情况下,只需删除第二个声明,因为它没有用处。

答案 1 :(得分:2)

错误信息非常明确:您已在in内声明了名为main()的变量。事实上,声明是相同的,这意味着第二个是不必要的。删除违规行,后面的代码仍然可以从第一个声明中受益;一切都会好起来的。

您只需要一个Scanner来阅读System.in - 一旦您创建了一个,您就不需要创建另一个;继续重用你已经制作的那个。

答案 2 :(得分:2)

Scanner in = new Scanner(System.in);   // FIRST ONE HERE

int bottles = in.nextInt();
double totalVolume = totalVolume * BOTTLE_VOLUME;
System.out.print("Please enter the number of cans: ");

Scanner in = new Scanner(System.in);   // SECOND ONE HERE

看看那段代码。您确实尝试创建in的两个副本,正如错误消息所示。

在您想要重复使用变量的正常情况下,您只需第二次分配,例如:

int xyzzy = 42;             // Create it here.
doSomethingWith (xyzzy);
xyzzy = 314159;             // NOTE: no "int" here, simple reuse.
doSomethingWith (xyzzy);

但是,在您的情况下,这不适用,您只需将变量声明两次。

所以,订阅“尽可能晚地创建变量”的哲学,我会摆脱第一个,这是不需要的。你可以摆脱第二种,但上述哲学对我有用,确保对象的创建和使用是本地化的。

相关问题