这个程序简化为我们在音乐商店中找到的东西。我们进入我们想要的命令,它使得那个命令想要做什么。这些是选项。
创建“客户”|“音乐”|“销售”
列出“客户”|“音乐”|“销售”
删除“客户端”|“音乐”|“销售”(使用或不使用生成的代码当我们创建新的声明时)
程序必须执行,直到我们输入“close”。
在这里,我发布了迄今为止我所做的事情。
主要问题是如果我们输入错误的命令或者输入这里不存在的东西,如何抛出异常。现在,这发生了,它只是回到了开始。如果你给我任何关于你认为对程序更好的改变或修改的建议,我也会感到骄傲,我只是从这开始,我知道这可以用更好的方式完成:
public class Main {
static GestionarMusica musiclist= new GestionarMusica(20);
static GestionarCliente clientlist= new GestionarCliente(20);
static Scanner input= new Scanner(System.in);
static String instructions;
public static void main (String[] args){
do{
try{
System.out.println("Waiting for instructions: ");
instructions= input.nextLine();
switch (instructions){
case "create client":
createClient();
break;
case "create music":
createMusic();
break;
case "create selling":
//createSelling();
break;
case "list client":
listClient();
break;
case "list music":
listMusic();
break;
case "list selling":
//listSelling();
break;
}
}catch (NullPointerException npe){
System.out.println("There are not articles on the list");
}
if (instructions.equals("erase client")){
eraseClientWithoutCode();
}
if (instructions.length() <= 18 && instructions.length() >= 17 && instructions.substring(0, 16).equals("erase client")){
String client_code = instructions.substring(16);
client_code = client_code.trim();
int code = Integer.parseInt(client_code);
eraseClientWithCode(code);
}
if (instruction.equals("erase music")){
eraseMusicWithoutCode();
}
if (instructions.length() <= 17 && instructions.length() >= 16 && instructions.substring(0, 15).equals("erase music")){
String music_code = instructions.substring(15);
music_code = music_code.trim();
int code = Integer.parseInt(music_code);
eraseMusicWithCode(code);
}
if (instructions.equals("erase selling")){
eraseSellingWithoutCode();
}
if (instructions.length() <= 16 && instructions.length() >= 15 && instructions.substring(0, 14).equals("erase selling")){
String selling_code = instructions.substring(14);
selling_code = selling_code.trim();
int code = Integer.parseInt(selling_code);
eraseSellingWithCode(code);
}
}while(!instructions.equals("close"));
}
public static void createMusic() {
System.out.println("Insert album title: ");
String title = teclado.nextLine();
System.out.println("Insert album autor: ");
String autor = teclado.nextLine();
System.out.println("Insert format: ");
String format = input.nextLine();
musiclist.add(new Music(title, autor, format, musiclist.generateCode()));
}
public static void listMusic() {
System.out.println(musiclist.toString());
}
public static void eraseMusicWithCode(int code) {
musiclist.delete(code);
System.out.println("Article deleted");
}
public static void eraseMusicWithoutCode() {
System.out.println("Insert article code: ");
int code = input.nextInt();
musiclist.delete(code);
System.out.println("Article deleted");
}
更新 - 关于在switch语句中使用默认值
我无法使用默认值,因为这个原因。在开关内部我有创建和列表命令,但是我必须在女巫之外设置擦除命令,因为这取决于我是否使用代码输入命令,或不使用它。因此,如果我输入一个擦除命令,并且如果我在开关内有默认值,它将显示异常。
答案 0 :(得分:4)
如果您想使用switch/case
添加default
来处理未知命令。你不需要任何例外。只是正确处理错误的输入。
因此,您必须预先输入输入并确定这些是否具有三个参数。移动switch/case
内的特殊情况的代码并检查第三个参数。我为一个案子做了一个,所以你可以得到主意。
因此,默认情况下,有点脏,未测试代码将是:
public static void main (String[] args){
do{
try{
System.out.println("Waiting for instructions: ");
instructions= input.nextLine();
String preparsedInstructions = instructions;
int from = instructions.indexOf(" ");
if(from > -1){
int to = preparsedInstructions.indexOf(" ", from + 1);
if(to > -1){
preparsedInstructions = preparsedInstructions.substring(0, to);
}
}
switch (preparsedInstructions){
case "create client":
createClient();
break;
case "create music":
createMusic();
break;
case "create selling":
//createSelling();
break;
case "list client":
listClient();
break;
case "list music":
listMusic();
break;
case "list selling":
//listSelling();
break;
case "erase client":
if (instructions.length() <= 18 && instructions.length() >= 17 && instructions.substring(0, 16).equals("erase client")){
String client_code = instructions.substring(16);
client_code = client_code.trim();
int code = Integer.parseInt(client_code);
eraseClientWithCode(code);
}else{
eraseClientWithoutCode();
}
break;
...//do for erase music,selling
default: //error handling
}
}catch (NullPointerException npe){
System.out.println("There are not articles on the list");
}
}while(!instructions.equals("close"));
}
答案 1 :(得分:0)
您可以添加一个default:
案例来处理其他正在输入的内容。如果值不是任何列出的选项,则执行default:
中的语句。我相信switch's documentation很好地展示了如何做到这一点。
答案 2 :(得分:0)
只是为了简化
case "list selling":
//listSelling();
break;
default:
if(instructions.equals("erase music") || instructions.equals("erase client") ){
System.out.println("hello delete");
//do your operation
}
else{
System.out.println("hello default throw exceliotn");
throw new RuntimeException("Invalid entry");
}
}
您可以有效地将if
子句移动到方法中,并且可以返回'boolean flag'以确定是否抛出异常。这将提高可读性。