我是java的新手。我的代码。我使用Scanner确定了我的String数组大小和nextint metod。然后ı已经使用nextline metod添加了字符串。这似乎对我来说是正确的,但我不能看到我的数组的第一个值。这段代码中的问题是什么。
public class App {
public static void main(String[] args) {
String[] arr;
Scanner sc = new Scanner(System.in);
System.out.println("write a number ");
int n = sc.nextInt();
arr = new String[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextLine();
}
System.out.println(arr[0]);
}
}
答案 0 :(得分:5)
你可以看到第一个条目,它恰好是一个空白String
。
发生这种情况的原因是,当您调用int n = sc.nextInt();
并且用户按 Enter 时,Scanner
会读取整数,但会将行尾字符保留在缓冲液中。
当您使用sc.next()
阅读第一个字符串时,会立即扫描行尾“剩余”,并将其作为第一个空白的String
呈现给您的程序。
此问题的解决方法很简单:在sc.next()
之后调用sc.nextInt()
,然后忽略结果。
答案 1 :(得分:-1)
而不是
for (int i = 0; i < n; i++) { arr[i] = sc.nextLine(); } System.out.println(arr[0]);
待办事项
arr[0] = sc.nextLine();
for (int i = 0; i < n; i++) { arr[i] = sc.nextLine(); } System.out.println(arr[0]);
这是在nextInt()之后使用nexLine()时发生的错误,因为nextInt()不会从输入流缓冲区中提取\ n,所以当你调用nextLine()时它只消耗\ n character(nextLine()实现为消耗字符,直到遇到\ n)