此问题来自https://www.hackerrank.com/,其链接为https://www.hackerrank.com/challenges/java-list/problem。 在下面的代码中while循环运行两次,根据问题我们需要输入Q,Q乘以在Array Declared中执行的操作。为此,我运行两次循环,以便我可以得到所需的结果。
import java.util.*;
public class javaList {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int i, x;
ArrayList L = new ArrayList(N);
for (i = 0; i < N; i++) {
L.add(sc.nextInt());
}
int Q = sc.nextInt();
i = 0;
// for normal running i have multiplied Q by 2 so that i can get the results
while (i < Q * 2) {
System.out.println("Loop: " + i);
String s = sc.nextLine();
int sz = L.size();
// code for checking insert
if (s.equals("Insert")) {
x = sc.nextInt();
int y = sc.nextInt();
//if the position i am looking exists then just replace
// i need to insert at index x of array L but array.size() gives one more than the last index
if ((sz - 1) >= x) {
L.add(x, y);
}
//if the position i am looking does not exist then create
else {
for (int j = sz; j <= x; j++) {
//add number to desired place
if (j == x)
L.add(y);
//in between the two endings of array and insertion adding default value 0
else
L.add(0);
}
}
//checking code for Delete
} else if (s.equals("Delete")) {
x = sc.nextInt();
//if the desired location exists then only replace
if ((sz - 1) >= x) {
L.remove(x);
}
}
i++;
}
for (i = 0; i < L.size(); i++) {
System.out.print(L.get(i) + " ");
}
}
}
我想知道为什么循环在一次运行中运行两次。
答案 0 :(得分:0)
因此,通过评论中的讨论,您已经说过您的问题是:
如果Q = 2,则应该在我的代码中询问插入或删除操作4次。但它只问了2次。这就是我的问题
首先,您可能无法完全理解自己的程序流程。在while循环之前,您需要输入三组值,N的值,L的值和Q的值。
进入while循环后,系统会提示您输入s的值(您似乎打算使用&#34;插入&#34;或&#34;删除&#34;)。但是,第一次,它将获得一个空字符串,s将是&#34; \ n&#34;。为什么?因为对于N,L和Q,用户将输入如下值:
[value] [ENTER]
返回键本身就是一个值。因此,在输入缓冲区(假设Q = 2)中,是&#34; 2 \ n&#34;。当您的代码运行以获得s String s = sc.nextLine();
时,它将看到下一行符号并跳过提示用户输入。
因为s不是&#34;插入&#34;或&#34;删除&#34;,它将在第一次跳过这些。然后,系统将提示您输入&#34; s&#34;的值。在下一个循环开始之后。
为了帮助您了解正在发生的事情,我建议您在要求用户输入值的地方添加语句,例如System.out.println("Enter a value for Q:");
这将帮助您跟踪程序流程。
答案 1 :(得分:-1)
你的代码很复杂。试试这个:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Integer> list = new ArrayList<>();
for (int i = 0, n = scanner.nextInt(); i < n; i++) {
list.add(scanner.nextInt());
}
for (int i = 0, n = scanner.nextInt(); i < n; i++) {
if (scanner.next().equals("Insert")) {
list.add(scanner.nextInt(), scanner.nextInt());
} else {
list.remove(scanner.nextInt());
}
}
String result = list.stream()
.map(String::valueOf)
.collect(Collectors.joining(" "));
System.out.println(result);
}