所以我正在做一个HackerRank问题,因为某种原因似乎无法通过所有测试。我的代码通过了第一次运行但似乎没有通过所有其他测试。通过调试,似乎一旦使用了所有开关盒,for循环就会终止。
此练习是Java List问题。输入如
5
12 0 1 78 12
2
Insert
5 23
Delete
0
第一行包含一个整数N(列表中的初始元素数,在本例中为5)。 第二行包含组成列表的N个以空格分隔的整数。 第三行包含一个整数q(查询数)。 后续行描述了查询,每个查询分为两行:
如果查询的第一行包含字符串插入,则第二行包含两个以空格分隔的整数,并且该值必须插入到索引处。 如果查询的第一行包含字符串删除,则第二行包含index,其元素必须从中删除。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ListSolution {
public static void main(String[] args){
List<Integer> list1 = new ArrayList<>();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
for(int i =0;i<n;i++){
list1.add(sc.nextInt());
}
sc.nextLine();
int q = sc.nextInt();
sc.nextLine();
for(int i=0;i<q;i++){
switch(sc.nextLine()){
case "Insert" :
int x = sc.nextInt();
int y = sc.nextInt();
sc.nextLine();
list1.add(x,y);
continue;
case "Delete" :
int z = sc.nextInt();
list1.remove(z);
continue;
default:
continue;
}
}
for(int i=0;i<list1.size(); i++){
System.out.print(list1.get(i)+" ");;
}
}
}
我能够完成问题并传递此特定输入。但是,它失败了所有其他3个查询,其中Insert和Delete是前两个。似乎一旦开关经历了所有情况,它就会终止for循环,即使有更多的迭代要完成。这种输入的一个例子是:
10
100 50 20 10 70 80 200 259 1 900
3
Insert
2 80
Delete
6
Insert
5 89
答案 0 :(得分:1)
在switch的情况下,使用sc.next()而不是sc.nextLine()。最后,从插入案例中删除sc.nextLine()。
答案 1 :(得分:0)
这是一个有效的解决方案:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class ListSolution {
public static void main(String[] args){
List<Integer> list1 = new ArrayList<>();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
for(int i =0;i<n;i++){
list1.add(sc.nextInt());
}
sc.nextLine();
int q = sc.nextInt();
sc.nextLine();
for(int i=0;i<=q;i++){
String input = sc.nextLine();
switch(input) {
case "Insert" :
int x = sc.nextInt();
int y = sc.nextInt();
sc.nextLine();
list1.add(x,y);
continue;
case "Delete" :
int z = sc.nextInt();
list1.remove(z);
sc.nextLine();
continue;
default:
continue;
}
}
for(int i=0;i<list1.size(); i++){
System.out.print(list1.get(i)+" ");;
}
}
}
你忘记的主要事情是删除后你没有要求获得新的一行。所以在你的第二个例子中,开关是一个空行返回,因此你得到的值是错误的。
如果我正在做这个练习,我会将每一行作为一个字符串,然后解析它。例如。获得整数:
String[] numbers = sc.nextLine().split(" ");
for(String number: numbers){
list1.add(Integer.valueOf(number));
}
这样你就没有奇怪的行混淆。