java数组输入问题,求解原因和解决方法
public void InputArray(){
int arraylength; //输入的数组长度 Scanner sc = new Scanner(System.in); System.out.print("请输入数组的长度:"); arraylength = sc.nextInt(); ArrayList<String> arr=new ArrayList<String>(); //输入String类型的动态数组 for(int i = 0;i<arraylength;i++) { System.out.print("请输入String数组的内容:"); String scanner=sc.nextLine(); arr.add(scanner);
}
把循环的nextLine改为next,可以正常运行,但是输入String的内容不能有空格;如果是nextLine的话,输入完长度,按下enter之后就会运行异常,直接显示两段内容 展开
小朋友,蜀黍告诉你,
public void InputArray(){
int arraylength; //输入的数组长度
Scanner sc = new Scanner(System.in);
System.out.print("请输入数组的长度:");
arraylength = sc.nextInt();
ArrayList<String> arr=new ArrayList<String>(); //输入String类型的动态数组
sc.nextLine();
for(int i = 0;i<arraylength;i++)
{
System.out.print("请输入String数组的内容:");
String scanner=sc.nextLine();
arr.add(scanner);
}
nextInt()方法会读取下一个int型标志的token.但是焦点不会移动到下一行,仍然处在这一行上。当使用nextLine()方法时会读取改行剩余的所有的内容,包括换行符,然后把焦点移动到下一行的开头。所以这样就无法接收到下一行输入的String类型的变量。所以你看你“请输入String数组的内容”这句话显示了两遍才能输入,第一遍实际上由于读入空字符跳过了,为了正确读取数据,加一句sc.nextLine();就可以跳过这个分隔符,下面也就可以正常输入了,懂了吗
你好:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException{
InputArray();
}
public static void InputArray()throws IOException{
int arraylength; //输入的数组长度
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入数组的长度:");
arraylength = Integer.parseInt(input.readLine());
ArrayList<String> arr=new ArrayList<String>(); //输入String类型的动态数组
for(int i = 0;i<arraylength;i++)
{
System.out.print("请输入String数组的内容:");
String scanner=input.readLine();
arr.add(scanner);
}
}
}
运行结果: