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. 为同一流仅创建一个 Scanner(例如, only first、 no second

更多解释:

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

  • first-System.in被包裹Scanner
  • second-System.in被包裹Scanner
  • Directly in some places, for example s2 = (char) System.in.read();

Instead, create only one Scanner and use it for all the reads from System.in

于 2012-05-17T03:50:02.357 回答