Skipped Code导致程序提前结束

时间:2012-05-17 03:37:56

标签: java block volume calculator

我目前正在尝试创建一个音量,面积,表面积和周长计算器,但我遇到了一些问题

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语句而不是暂停读取char后它跳过整个块然后转到case'5': 在任何事情完成之前结束程序。

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:1)

IO缓冲是许多问题的根源,我建议你:

  1. 仅通过扫描程序(例如,无System.in
  2. 访问System.in.read
  3. 为同一个流只创建一个扫描程序(例如,只有first,没有second
  4. 更多解释:

    您正在通过3个不同的对象访问标准输入流(例如用户输入):

    • first - System.inScanner
    • 包裹
    • second - System.inScanner
    • 包裹
    • 直接在某些地方,例如s2 = (char) System.in.read();

    相反,只创建一个Scanner并将其用于System.in的所有读取