0

現在、体積、面積、表面積、周囲の計算機を作成しようとしていますが、ほとんど問題が発生していません

package Volume;

public class C {
  static double r;
  static double h;

    static double volume() {
      return (25/7.957747154)*(r*r)*h;
    }

}

データクラス

package Volume;

import java.io.IOException;
import java.util.Scanner;

public class VC {
  public static void main(String args[]) 
    throws IOException {
      char s2;  
      char s1;
      Scanner first = new Scanner(System.in);
      Scanner second = new Scanner(System.in);
      a: {
      System.out.println("Chose your Type: \n1.Volume \n2.Area \n3.Surface Area \n4.Perimeter \n5.Exit \nPlease type the number of your option.");
      s1 = (char) System.in.read();
      switch(s1) {
        case '1':
        System.out.println("Chose Your Shape: \n1.Cylinder \ntype the number");
        s2 = (char) System.in.read();
        switch(s2) {
          case '1': 
          System.out.println("Raidius?");
          Volume.C.r = first.nextDouble();
          System.out.println("Height?");
          Volume.C.h = second.nextDouble();
          Double v;
          v = Volume.C.volume();
          System.out.println("The Volume is:" + v);
          break a;
       }
       case '5':
       System.out.println("GoodBye");
     }
   }
 }
}

メインクラス

私が遭遇する問題は、文字を読み取るために一時停止するのではなく、最初の switch ステートメントを終了した後、そのブロック全体をスキップしてケース '5' に移動することです。何かが完了する前にプログラムを終了します。

誰かが私にこれを説明してもらえますか?

4

1 に答える 1

1

IO バッファリングは多くの問題の原因です。次のことをお勧めします。

  1. スキャナ経由でのみアクセスSystem.in(例: no System.in.read)
  2. 同じストリームに対して単一のスキャナのみを作成します (例: only first、 no second) 。

もう少し説明:

3 つの異なるオブジェクトを介して標準入力ストリーム (ユーザー入力など) にアクセスしています。

  • first-System.inラップScanner
  • second-System.inラップScanner
  • たとえば、いくつかの場所で直接s2 = (char) System.in.read();

代わりに、1 つだけ作成し、Scannerそれをすべての読み取りに使用します。System.in

于 2012-05-17T03:50:02.357 に答える