问题描述
我已经编写了一个代码来接收字符串输入并将其存储在Java的字符串数组中。我的问题是,当我将字符串数组的大小声明为3时,它必须将三个字符串放入字符串数组中,但只将两个字符串放入字符串数组中,而不接受第三个字符串。谁能帮助我解决问题?
import java.util.Scanner;
public class leet14 {
public static void main(String[] args) {
Scanner sc=new Scanner(system.in);
int n;
System.out.println("enter length of string");
n=sc.nextInt();
String a[]=new String[n];
System.out.println("enter string values");
for(int i=0;i<a.length;i++){
a[i]=sc.nextLine();
}
for(int j=0;j<a.length;j++){
System.out.println(a[j]);
}
}
}
enter length of string
3
enter string values
one
two
one
two
解决方法
您必须先添加sc.nextLine()
,然后才能开始从控制台读取输入字符串。
import java.util.Scanner;
public class leet14 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n;
System.out.println("enter length of string");
n=sc.nextInt();
String a[]=new String[n];
sc.nextLine();
System.out.println("enter string values");
for(int i=0;i<a.length;i++){
a[i]=sc.nextLine();
}
for(int j=0;j<a.length;j++){
System.out.println(a[j]);
}
}
}
这将为您提供所需的结果。
输入:
enter length of string
3
enter string values
one
two
three
输出:
one
two
three
,
当您阅读int
并想阅读完整的String
时,则必须将Scanner
内的指针移动到下一行。 PS 。很容易找到是否调试程序。
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("enter length of string: ");
String[] arr = new String[scan.nextInt()];
scan.nextLine(); // <-- move to the next line to be ready to read a whole string
System.out.println("enter string values:");
for (int i = 0; i < arr.length; i++) {
System.out.format("line %d: ",i + 1);
arr[i] = scan.nextLine();
}
for (int j = 0; j < arr.length; j++)
System.out.println(arr[j]);
}
输出:
enter length of string: 3
enter string values:
line 1: one one
line 2: two two
line 3: three three
one one
two two
three three
,
我建议您看一下这段代码,也不要使用诸如n之类的值名称,它确实可以提高可读性并帮助您解决问题。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int inputCount=0;
System.out.println("enter length of string");
try{
inputCount=sc.nextInt();
}catch(Exception e){
System.out.println("int please");
System.exit(1);
}
String a[]=new String[inputCount];
System.out.println("enter string values");
for(int i=0;i<a.length;i++){
a[i]=sc.next();
}
for(int j=0;j<a.length;j++){
System.out.println(a[j]);
}
}
}
,
要获得所需的过程,请简单地将a[i]=sc.nextLine();
更改为a[i]=sc.next();
。除非您的字符串输入中包含空格,否则应该可以正常工作,否则请将sc.nextLine();
放在for循环之前
这就是我所看到的问题;
nextInt();
期望输入的第一个单词并将其存储为int
,否则会引发错误,但是不会超出当前行。
因此,当您运行n=sc.nextInt();
并提供输入信息时
enter length of string
3
3
已保存到n
,但系统光标仍然留在其后,3|
,
N.B:输出流与输入流不同,因此,System.out.println("enter string values");
运行无关紧要,输入流的光标仍停留在3以后;
enter length of string
3|
enter string values
a[i]=sc.nextLine()
期望并在光标之后存储该句子,否则它将中断到下一行。但是,如果光标已经在新行上,则可以输入一个新句子(然后根据需要存储它)并移至新行。
因为光标3|
之后没有句子,所以它会中断到下一行,并在{时在for循环中将中断行(newline)命令"\n"
分配给a[0]
{1}},
因此,由于光标现在位于新行上,因此当输入i = 0
并进入下一行时,它提供了输入新句子并将其存储到a[1]
的选项, i = 1
然后i = 2
的内容显示如下;
String[] a
我很乐意对此发表意见,谢谢。