2012-05-17 31 views
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”: 在完成任何事情之前结束程序。

难道有人请给我解释一下吗?

+1

正确地格式化你的代码可能会帮助你理解它。 – Jeremy

+0

它被格式化,直到我把它放在这里 –

+0

你的意图是在那里有一个while循环? –

回答

1

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

  1. 访问System.in只能通过扫描仪(例如没有System.in.read
  2. 创建只因为他同流的单一扫描仪(例如,只有first,没有second

一些更多的解释:

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

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

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

+0

我想出了非常感谢您的帮助先生现在到程序的其他部分 –

+0

好的新问题现在我有一个类似的问题与断言? –