我是第一个编程模块的学生。我工作的教科书是“适合所有人的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 [])中定义
答案 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);
但是,在您的情况下,这不适用,您只需将变量声明两次。
所以,订阅“尽可能晚地创建变量”的哲学,我会摆脱第一个,这是不需要的。你可以摆脱第二种,但上述哲学对我有用,确保对象的创建和使用是本地化的。