提问人:vlad19 提问时间:7/2/2022 最后编辑:helvetevlad19 更新时间:7/7/2022 访问量:113
该代码在某些情况下有效,但根据输入的顺序提供不同的输出
The code works in some cases but gives different outputs based on the sequence of the input
问:
预期输出应如下所示:
Download
String: Welcome to HackerRank's Java tutorials!
Double: 3.1415
Int: 42
我的代码根据我最初输入的内容给出不同的输出。 如果可能的话,请解释我哪里出了问题。 先谢谢你。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 1;
String typeCase = "";
while (count<4) {
if (!sc.hasNext("[0-9]+[\\.]?[0-9]*") || sc.hasNext(":ascii:")) {
typeCase = "String:";
count++;
} else if (sc.hasNextInt()) {
typeCase = "Int:";
count++;
} else if (sc.hasNextDouble()) {
typeCase = "Double:";
count++;
}
switch (typeCase) {
case "String:":
typeCase = "String: ";
System.out.println(typeCase + sc.nextLine());
break;
case "Int:":
typeCase = "Int: ";
System.out.println(typeCase + sc.nextInt());
break;
case "Double:":
typeCase = "Double: ";
System.out.println(typeCase + sc.nextDouble());
break;
}
}
}
答:
0赞
RohithPg
7/2/2022
#1
我认为,如果您确定整数和双精度输入将出现在它们自己的行中,那么更改下面的开关外壳块应该可以解决您的问题(如果没有,您将从此解决方案中获得有关重组代码以实现此类情况的提示)。在每个 sc.nextInt() 和 sc.nextDouble() 之后使用 sc.nextLine(),因为这些方法不会读取换行符。编辑:编辑答案,因为您似乎希望按 String、double 和 int 的顺序打印输出。您可以暂时存储扫描仪中的值,并在以后以所需的任何顺序打印它。请注意,我现在已经取下了开关盒
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int count = 1;
String typeCaseString = "";
String typeCaseInt = "";
String typeCaseDouble = "";
while (count<4) {
if (!sc.hasNext("[0-9]+[\\.]?[0-9]*") || sc.hasNext(":ascii:")) {
typeCaseString = "String:"+sc.nextLine();
count++;
} else if (sc.hasNextInt()) {
typeCaseInt = "Int:"+sc.nextInt();
sc.nextLine();
count++;
} else if (sc.hasNextDouble()) {
typeCaseDouble = "Double:"+sc.nextDouble();
sc.nextLine();
count++;
}
}
System.out.println(typeCaseString);
System.out.println(typeCaseDouble);
System.out.println(typeCaseInt);
}
评论