2017-09-06 9 views
1

inputGetter()のforループで何が返されているかに問題があります。ダブルを入力すると、間違った値が返されるか、何も返されません。あなたの時間をありがとう。すべてのヘルプは非常にあなたは、次のコードを試すことができます(これは私自身の利益のために答えを急ぐので、必要ではありません、それは学校のためではありません。)Java追加プログラムの戻り値の問題

import java.util.Scanner; 

public class AdditionExample { 

    public static void main(String[] args) { 
     double userInput1; 
     double userInput2; 
     System.out.println("Please enter a double-type number. Whole integers will not be accepted."); 
     userInput1 = inputGetter(); 
     System.out.println("Please enter another double-type number. Whole integers will not be accepted."); 
     userInput2 = inputGetter(); 
     additionExample(userInput1, userInput2); 
    } 

    public static double additionExample(double u, double i) { 

     double o = u + i; 
     System.out.println(o); 
     return o; 
    } 

    public static double inputGetter() { 
     Scanner inputGet = new Scanner(System.in); 
     boolean goodAnswer = true; 
     double userInput = 0.0; 

     while (goodAnswer == true) { 

      if (inputGet.hasNextDouble()) { 
       userInput = inputGet.nextDouble(); 
       goodAnswer = false; 
      } 
      else { 
       System.out.println("You done did it wrong."); 
       inputGet.next(); 
       break; 

      } 
     } 
     inputGet.close(); 
     return userInput; 

    } 

} 
+0

おそらく、あなたがScannerクラスを2回初期化するからです。メイン関数でスキャナの初期化を移動してから、試してみることができます。 –

+0

「それは間違った値を返す」は不明です。 *何*入力のために返されますか? – Bohemian

答えて

0

認識されます。基本的には、inputGetterをグローバルスコープで移動し、関数inputGet()のスコープから削除しました。これは、あなたが1つのJavaプログラムインスタンスに対してScannerクラスのインスタンスを1つだけ必要とするためですが、以前は2つ作成していたからです。

import java.util.Scanner; 



    public class AdditionExample { 
     static Scanner inputGet; 

     public static void main(String[] args) { 
      inputGet = new Scanner(System.in); 
      double userInput1; 
      double userInput2; 
      System.out.println("Please enter a double-type number. Whole integers will not be accepted."); 
      userInput1 = inputGetter(); 
      System.out.println("Please enter another double-type number. Whole integers will not be accepted."); 
      userInput2 = inputGetter(); 
      additionExample(userInput1, userInput2); 
      inputGet.close(); 
     } 

     public static double additionExample(double u, double i) { 

      double o = u + i; 
      System.out.println(o); 
      return o; 
     } 

     public static double inputGetter() { 

      boolean goodAnswer = true; 
      double userInput = 0.0; 

      while (goodAnswer == true) { 

       if (inputGet.hasNextDouble()) { 
        userInput = inputGet.nextDouble(); 
        goodAnswer = false; 
       } 
       else { 
        System.out.println("You done did it wrong."); 
        inputGet.next(); 
        break; 

       } 
      } 

      return userInput; 

     } 

    } 

注:あなたのロジックによって、すべての整数も2倍であるため、整数型には抵抗できません。したがって、整数はinputGet.hasNextDouble()に対してtrueを返します。あなたはこれよりも気の利いた何かを考え出す必要があります:)

+1

"goodAnswer"という変数には不適切な名前が付けられているようです - 良い答えがあればfalseに設定し、また、ブール値とfalseを比較するべきではありません。ちょうど 'if(goodAnswer)'か 'if(!goodAnswer)'と答えてください。 – FredK

+0

私もそれに気づきましたが、OPのコードのようにそのまま残しました。必要です。 –