2017-01-15 14 views
0

継続的に上昇する水位を繰り返し求めるプログラムを作成しようとしています。私のプログラムは、行内に3つの読み値が減少したときに検出する必要があります。ここでは、コンソールに印刷されたものである。入力/出力Javaの例

水位が(mm単位で)今では何ですか:20
(単位mm)今の水位は何ですか:21
の水位は何ですか23
現在の水位は何ですか(mm単位):25
現在の水位は何ですか(mm単位):27
今の水位は何ですか(単位:mm) :27
現在の水位は何ですか(単位:mm):34
現在の水位は何ですか(単位:mm):22
(mm単位)今の水位は何ですか:25
(mm単位)今の水位は何ですか:26
(mm単位)今の水位は何ですか:28
水で何27
現在の水位は何ですか(mm):26
現在の水位は何ですか(mm):25
洪水が沈んでいるようです。

現在、私はループにそれをすべき知っているが、私は、Javaを続行するかどうかはわからないだので、私は、Pythonで取り組んできました。 質問の入力を以前の回答と比較するために質問の入力を保存するにはどうすればよいですか?どんな助力があれば幸いです。

import java.util.Scanner; 


public class waterLevelProgram { 

    public static void main(String[] args) { 

     double waterLevel, initialWaterLevel; 
     waterLevel = 0; 
     System.out.print("What is the water level at now (in mm): "); 
     initialWaterLevel = new Scanner(System.in).nextDouble(); 

     while (waterLevel > 0){ 
      System.out.println("What is the water level at now (in mm): "); 
      waterLevel = new Scanner(System.in).nextDouble(); 
      if (waterLevel > initialWaterLevel){ 
      } 
     } 
    } 
} 
+1

あなただけのキューで一度に数を格納し、測定値の全てを格納する必要がない場合は - とのArrayList –

+0

を使用してください。私達と – synchronizer

+0

シェアは、あなたはPythonでそれを行うだろうか、とあなたはJavaへの変換のトラブルを抱えている特定のビットがありますならば、我々はそれを支援することができます。 –

答えて

1

ここでの問題は、あなたが最初の水位すなわちinitialWaterLevelたびに、現在のwaaterLevelを比較しているので、あなたが予期しない出力を取得しているということです。ループの最後にinitialWaterLevelを現在のレベルに更新して、次回のループで比較できるようにする必要があります。あなたの目的は、連続して3つの減少が起こるかを簡単にint変数によって行うことができるかどうかをチェックすることですので、

public static void main(String[] args) { 

    double waterLevel, initialWaterLeve; 
    waterLevel = 0; 
    initialWaterLeve = 0; 
    int count=0; 
    Scanner sc = new Scanner(System.in); 

    while (waterLevel > 0){ 
     System.out.println("What is the water level at now (in mm): "); 
     waterLevel = sc.nextDouble(); 
     if (waterLevel < initialWaterLevel){ 
       count++; 
     } 
     else{ 
       count=0; 
     } 

     if(count>=3){ 
      System.out.println("It appears that the flood is subsiding."); 
      break; // if you want to come out of loop. 
     } 
     initialWaterLevel = waterLevel; 
    } 
} 

のArrayListまたはキューの必要はありません。

+0

なぜ繰り返しごとに新しいScannerを作成していますか? – synchronizer

+0

@synchronizer私はそれを編集しました。ありがとうございました –

+0

ありがとう!カウントを4に変更しなければならなかったが、これは私が行方不明だったものだ!私は数を忘れた! – coding101

0

にArrayListのを使用してプログラムに値を格納する方法についての簡単な例(そのようなトリックを覚えておいてください):

import java.util.Scanner; 

public class waterLevelProgram { 

    ArrayList<double> waterLevels = new ArrayList<double>(); 

    public static void main(String[] args) { 

     Scanner scanner = new Scanner(System.in); 

     while (true){ 
      System.out.println("What is the water level at now (in mm): "); 
      currentWaterLevel = scanner.nextDouble(); 
      waterLevels.add(currentWaterLevel); 
      if (isFloodSubsiding()) 
       System.out.println("Flood is subsiding"); 
     } 
    } 

    public static boolean isFloodSubsiding(){ 
     if (waterLevels.size() >= 3) 
     { 
      return 
      (
      waterLevels.get(waterLevels.size()-1) < waterLevels.get(waterLevels.size()-2) 
     && waterLevels.get(waterLevels.size()-2) < waterLevels.get(waterLevels.size()-3) 
      ); 
     } 
     else 
      return false; 
    } 
} 

をしかし、あなただけ処理する必要があればあなたが本当に保存する必要はありません@jackで述べたようにwaterLevelが3回連続して減少しているときの警告です。あなたは、より複雑な操作(例えば統計レポート)を必要とする場合 これは、ArrayListのと連携する方法についてのヒントである可能性があります。

+0

条件がうまくいかない場合、 'waterLevels'の最後の要素は' currentWaterLevel'になると思います。 –

+0

ありがとうございます。 – salvolds

+0

@ code101の問題は依然として解決されていません。 –