2015-09-26 74 views
0

我创建了一个程序来处理刑事案件并存储它,然后我添加了另一个交换机,以便我可以访问我希望在程序中添加的其他内容。但是当选择被执行时似乎有错误。开关不会识别我的选择,而是重复循环中的菜单。编译过程中没有错误。这里的编码...交换机中的奇怪错误

import java.util.ArrayList; 
import java.util.Scanner; 

public class CriminalCase { 




    private String batput; 
    public String getBatput(){return batput;} 


    public CriminalCase(String batput){ 
     this.batput = batput; 

    } 

private static class robin{ 
    String Batman(){ 
Scanner s=new Scanner (System.in); 
System.out.println(); 
System.out.println("Enter name."); 
String a=s.nextLine(); 
System.out.println("Enter Date of birth."); 
String b=s.nextLine(); 
System.out.println("Enter Sex."); 
String c=s.nextLine(); 
System.out.println("Enter Crime Committed."); 
String d=s.nextLine(); 
System.out.println("Enter Date of Crime Committed."); 
String e=s.nextLine(); 
System.out.println("Enter Victim."); 
String f=s.nextLine(); 
System.out.println(); 
String g=""+"\n"+""+"Name:- "+a +"\nDOB:- "+b +"\nSex:- "+c +"\nCrime Committed:- "+d +"\nDate of Crime Committed:- "+e +"\nVictim:- "+f; 
System.out.println(); 
return g; 
    } 
} 



    public static void main(String[] args) { 


     ArrayList<CriminalCase> cases = new ArrayList<>(); 
     boolean quit = false;  

     Scanner s = new Scanner(System.in); 

     robin j=new robin(); 
     boolean exit=false; 
for(;!exit;){ 
System.out.println("For cases press 1.\nFor printing thank you, press 2.\nTo exit, press 3."); 
int choice=s.nextInt(); 
switch (choice){ 
case 1:{ 

     while (!quit) { 
      System.out.println(); 
      System.out.println("To view current cases enter v\nto add a case enter a\nto quit enter q"); 
      String input = s.nextLine(); 

      switch(input){ 
       case ("v"): { 
        System.out.println(""); 
        System.out.println("The following cases exist:"); 
        System.out.println("\nName:- Batman\nDOB:- Unknown\nSex:- Male\nCrime Committed:- Tresspassing a crime scene, Fleeing scene of crime, Carrying unlicensed vehicles and 

weapons.\nDate of Crime Committed:- 18/9/2015\nVictim:- None."); 
        for (CriminalCase c : cases) 
        System.out.println(c.getBatput()); 
        break; 
       } 
       case("a"):{ 
        String batput=j.Batman(); 

        cases.add(new CriminalCase(batput)); 
        break; 
       } 
       case("q"):{ 
        quit = true; 


       } 

      } 
     } 
break;  
} 
case 2:System.out.println("Thank you."); 
break; 

case 3:exit=true; 
     } 
    } 
    } 

}

+2

*当您在Stack Overflow上发布信息时,请*花时间格式化您的代码 - 我不希望您的代码看起来像您的IDE(或其他)。缩进代码,删除大量额外的空白等等。还有更多代码比你真正需要证明问题 - 如果问题只在选择位上,你是否需要休息?请参阅http://stackoverflow.com/help/mcve –

+2

一如既往:'Scanner.nextInt()'不_not_消耗必须在控制台上输入的换行符。所以你必须在's.nextInt()'之后运行一个额外的's.nextLine()'。由于代码太多,我无法查看代码中是否存在任何问题。 – Seelenvirtuose

+1

谢谢!并且会在下次照顾格式! –

回答

2

没有测试我猜的错误是在这一段代码:

int choice=s.nextInt(); 
switch (choice) 
{ 
case 1:{ 

    while (!quit) { 
     System.out.println(); 
     System.out.println("To view current cases enter v\nto add a case enter a\nto quit enter q"); 
     String input = s.nextLine(); 

您正在阅读的整数,nextInt()方法,然后,你应该打电话nextLine()如下

int choice=s.nextInt(); 
s.nextLine() 
switch (choice) 
{ 
.... 

看看这个问题t Ø理解这种行为:

Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods

编辑(我的个人建议):

我在一行中读取一个整数像如下:

int choice = Integer.parseInt(s.nextLine()); 

尝试实现这个版本

+0

我实现了上述解决方案,但问题仍然存在于第一个菜单的循环中。菜单一遍又一遍地弹出,忽略了我对案例菜单的输入。 –

+1

解决!问题在布尔!谢谢大家的帮助! –

1

布尔未被重置为false,因此循环从未访问! 以下是答案的最终编码!

import java.util.ArrayList; 
import java.util.Scanner; 

public class CriminalCase { 




    private String batput; 
    public String getBatput(){return batput;} 


    public CriminalCase(String batput){ 
     this.batput = batput; 

    } 

private static class robin 
{ 
    String Batman() 
{ 
Scanner s=new Scanner (System.in); 
System.out.println(); 
System.out.println("Enter name."); 
String a=s.nextLine(); 
System.out.println("Enter Date of birth."); 
String b=s.nextLine(); 
System.out.println("Enter Sex."); 
String c=s.nextLine(); 
System.out.println("Enter Crime Committed."); 
String d=s.nextLine(); 
System.out.println("Enter Date of Crime Committed."); 
String e=s.nextLine(); 
System.out.println("Enter Victim."); 
String f=s.nextLine(); 
System.out.println(); 
String g=""+"\n"+""+"Name:- "+a +"\nDOB:- "+b +"\nSex:- "+c +"\nCrime Committed:- "+d +"\nDate of Crime Committed:- "+e +"\nVictim:- "+f; 
System.out.println(); 
return g; 
} 
} 



    public static void main(String[] args) { 


     ArrayList<CriminalCase> cases = new ArrayList<>(); 
     boolean quit = false;  

     Scanner s = new Scanner(System.in); 

     robin j=new robin(); 
     boolean exit=false; 
for(;!exit;) 
{ 
System.out.println("For cases press 1.\nFor printing thank you, press 2.\nTo exit, press 3."); 
int choice=Integer.parseInt(s.nextLine()); 
switch (choice) 
{ 
case 1:{ 

     while (!quit) { 
      System.out.println(); 
      System.out.println("To view current cases enter v\nto add a case enter a\nto quit enter q"); 
      String input = s.nextLine(); 
      switch(input){ 
       case ("v"): { 
        System.out.println(""); 
        System.out.println("The following cases exist:"); 
        System.out.println("\nName:- Batman\nDOB:- Unknown\nSex:- Male\nCrime Committed:- Tresspassing a crime scene, Fleeing scene of crime, Carrying unlicensed vehicles and 

weapons.\nDate of Crime Committed:- 18/9/2015\nVictim:- None."); 
        for (CriminalCase c : cases) 
        System.out.println(c.getBatput()); 
        break; 
       } 
       case("a"):{ 
        String batput=j.Batman(); 

        cases.add(new CriminalCase(batput)); 
        break; 
       } 
       case("q"):{ 
        quit = true; 


       } 

      } 
     } 
quit=false; 
break;  
} 
case 2:System.out.println("Thank you."); 
break; 

case 3:exit=true; 
} 
} 
} 

}