2012-03-28 5 views
0

私は宿題に取り組んでいます。私は近くにいますが、問題があります。私はちょうどパッケージから作業する方法を学んだので、パッケージから別のクラスをインポートしているクラスがあります(私はそれが正しいと思います) メインは-100〜100の整数を入力するように促し、それを検証する問題。私は問題が私が輸入している場所であることを知っている私はそれを修正するために行く必要がある方向を確信しています。インポートしますか?パッケージを使って作業する

これは私のメインコードのセクションです。私は私の下に波線を取得するコード

int i = c. 

の最後の行では

import myUtils.util.Console; 

    public class ConsoleTestApp 
    { 
     public static void main(String args[]) 
     { 
      // create the Console object 
      Console c = new Console(); 

      // display a welcome message 
      c.println("Welcome to the Console Tester application"); 
      c.println(); 

      // int 
      c.println("Int Test"); 
      int i = c.getIntWithinRange("Enter an integer between -100 and 100: ", -101, 101); 
      c.println(); 

を私は使用していない私に語っている(あなたが先にスキップしたい場合は、私の問題は、最後の数行から始まります)ローカル変数を使用しているので、別のクラスで使用しようとしているので、この状況で何が正確に修正されているのか分かりません。オブジェクトを作成する必要はありますか?

私はConsoleと呼ばれるクラスを持っています。これは、正しくインポートしたと思われる別のパッケージにあります。 ここに私は私のコンソールクラスで立ち往生しているコードです。

package myUtils.util; 

import java.util.Scanner; 

public class Console 

{ 
Scanner sc = new Scanner(System.in); 
public void print(String s) 
{ 
    System.out.println(); 
} 

public void println(String s) 
{ 
    System.out.println(); 

} 

public void println() 
{ 
    System.out.println(); 

} 

public int getIntWithinRange(String prompt, int min, int max) 
{ 

    int i = 0; 
    boolean isValid = false; 
    while (isValid == false) 
    { 
     System.out.println(prompt); 
     if (sc.hasNextInt()) 
     { 

      i = sc.nextInt(); 
       if (i < min) 
       { 
        System.out.println("Error! Please enter an integer greater than -100"); 
       } 

       else if (i > max) 
       { 
        System.out.println("Error! Please enter an integer less than 100"); 
       } 

       else 
        isValid = true; 
     } 

     else 
     System.out.println("Error! Invalid number value"); 
     sc.nextLine(); 

    } 
     // return the int 
     return i; 

} 

public double getDoubleWithinRange(String prompt, double min, double max) 
{ 

    int d = 0 ; 
    boolean isValid = false; 
    while (isValid == false) 
    { 
     System.out.println(prompt); 
     if (sc.hasNextInt()) 
     { 
      //if user chooses menu option less than 1 the program will print an error message 
      d = sc.nextInt(); 
       if (d < min) 
       { 
        System.out.println("Error! Please select menu option 1, 2, or 3"); 
       } 
       //if the user chooses a menu option greater than 3 the program will print an error 
       else if (d > max) 
       { 
        System.out.println("Error! Please select menu option 1, 2, or 3"); 
       } 
       //if the option is between 1 and 3 the menu option is valid 
       else 
        isValid = true; 
     } 

     else 
     System.out.println("Error! Invalid number value"); 
     sc.nextLine(); 

    } 
     // return the int 
     return d; 

} 


public String getRequiredString(String prompt) 
{ 
    return prompt; 

} 

public String getChoiceString(String prompt, String s1, String s2) 
{ 
    return s2; 

} 

public int getInt(String prompt) 
{ 
    return 0; 

} 

}

私はこれを実行すると、私は、無効な数値である私の最後のプリントを得続けます。他のコンソールのメインメソッドからコードを正しくインポートしていませんか?

+1

おそらく無関係ですが、 'println(String s)'と 'print(String s)'は引数に何もしません。 –

+0

@Mike Samuel私はちょうどコードを書くようになり、私はそれに飛び込んだので、私は必要なものについていくつかの仕様を与えられました。一番きれいな書き方ではありませんが、私は一番簡単な方法で各方法に取り組みたいと思っていました。 –

答えて

2

これはインポートの問題ではありません。何か間違ったものをインポートしている場合、プログラムは最初にコンパイルされません。あるいは、最小限の起動で起動されません。

は限り実際にあなたの問題を修正、私はあなたがが getIntWithinRangeで最も外側 elseに関連付けられていると思う 二行を見て、実際にどのコードelseとに関連付けられているコードを考慮されていないお勧めします。主な問題は、ifまたはelseは複数の行を中括弧で囲まない限り、1行にのみ関連付けられていることです。更新質問

を受けて、私は私の私に告げる私の下に波線を得る:だから、あなたは

else { 
    System.out.println("Error! Invalid number value"); 
    sc.nextLine(); 
} 

EDITのように見えるようにgetIntWithinRangeの最後elseを変更する必要があります私は別のクラスでそれを使用しようとしているので、この状況でそれが何を正確に修正するか分からないので、ローカル変数を使用していません。オブジェクトを作成する必要はありますか?

今すぐ書いたコードはmainiを使用していません。これには他のメソッドやコンストラクタに渡さないことも含まれます。 iはローカル変数であるため、mainの外部にはアクセスできないため、Eclipseから警告があります。 Eclipseからのこの "ちらつきの赤い線"警告は、コードのコンパイルと実行を止めるものではありませんが、コード内でバグを見つけるのを助けることを目的としています。

より広範な注記では、未使用のローカルのために多くのバグがあり、Eclipseはこれらのバグを防ぐのを手伝っています。2次元配列のすべての要素をユーザーが指定した数に初期化したいという例を考えてみましょう(変数名は実際のプログラムで使用するよりも短く、ポイントを取得しますが)。

public static final int N = 10; 

public void main(String[] args) { 
    int[][] a = new int[N][N]; 
    int n = /* Read number from the user */; 

    for (int i = 0; i < N; i++) { 
     for (int j = 0; j < N; j++) { 
      a[i][j] = i; // Bug - we meant to initialize to n 
     } 
    } 

    // ... 
} 

Eclipseの未使用のローカルのフラグは、この種のバグを見つけやすくなります。

+0

ありがとう!私はそれを修正したと思う。私は自分のコードでそれを捕まえていませんでした。私はちょうど私の最初のクラス(私が掲載したコードの最初のセクション)に気付いた私の質問を編集しましたコードの行に問題が発生しています int i = c それは私がローカル変数を使用していないことを教えています。私はそれに心配する必要がありますか?私はその情報を他のクラスに持ってきたと思って以来、私はそれについて何をすべきか正確にはわかりません。 –

+0

@JeremyB Eclipseがそのエラーを表示している理由を説明するために私の答えを編集しました。コンストラクタに 'i'を渡すことによって"他のクラスに情報を渡す "と、赤い線が消えてしまいます。 –

関連する問題