2012-02-13 6 views
0

私は最初のプログラミングモジュールを使い始める学生です。私が取り組んでいる教科書は「Java for Everyone」、Cay Horstmannです。私は第2.4章の定数を使っています。コンパイルエラーがで生成されるたびに、main(java.lang.String [])に定義されていますが、私はこのコードを直接本からコピーしてチェックしました(15回以上!)。--- inはmain(java.lang.String [])ですでに定義されています---エラーメッセージDRIVING ME MAD

ハイライトスキャナが新しいスキャナ(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); 

    } 
} 

エラーメッセージ:中はすでに


答えて

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の2つのコピーを作成しようとしていますが、エラーメッセージが示しているとおりです。あなたは、変数を再利用したい通常の状況では

、あなたは単になどのように、それまで二時間をを割り当てます:、

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

しかし、あなたの場合には、これは適用されません。単に変数を2回宣言しただけです。

「可能な限り遅く変数を作成する」という哲学に登録すれば、最初のものを取り除くことはできません。それは必要ありません。あなたはを取り除くことができますが、上記の哲学が私にうまく役立っているので、オブジェクトの作成と使用がローカライズされています。

+0

あなたの迅速な返信をありがとうございました。私は何をやっていたのか分かりません。私は2番目のスキャナを削除し、totalVolumeを編集しています。私は勉強の多くの時間が私の脳機能を変えたとしか思えません!再度、感謝します :) – user1205882

3

([] java.lang.Stringで)メインで定義されていますだから、エラーメッセージは正確に正しいです - あなたはすでに何かを持っていますinエラーのある行の前に数行。あなたの特定のケースでは、2番目の宣言を削除するのは目的がないからです。

2

エラーメッセージはかなり明確です。つまり、inという変数がすでにmain()に宣言されています。実際、宣言は同一であるため、2番目の宣言は不要です。問題のある行を削除しても、後のコードは最初の宣言の恩恵を受けることができます。すべて正常に動作します。

あなたが必要なのはSystem.inから読むScannerです。作成した後は別のものを作成する必要はありません。あなたがすでに作ったものを再利用してください。

関連する問題