我的程序要求用户输入一些数据。我的问题是,当它运行时,它显示第一个问题,然后立即转到第二个问题,而不等待用户输入。我的朋友建议使用sc.nextLine(),它确实是第一次工作,但是当它循环回来时它给了我一个额外的空间并且实际上将空间保存到了我的obj。 为了说明,当我运行它时,它显示:
原文:输入位置1:多少个座位?(使用可输入)
使用附加的sc.nextLine:输入位置编号1 :(用户可以输入) 多少席位:
但第二次显示:输入位置2 :(用户可以输入) (然后是空间) 然后是接下来的问题:多少席位:
以下是我主要课程中的全部代码。提前谢谢。
package election;
import java.util.ArrayList;
import java.util.Scanner;
import java.lang.StringBuilder;
public class Election {
public static void main(String[] args) {
int maxpos;
int count;
int maxcan;
int cancount;
String name;
int num;
String position;
int posnum;
int seat;
String party;
int vote;
Scanner sc = new Scanner(System.in);
ArrayList<Candidate> list = new ArrayList<Candidate>();
Candidate c;
do{
System.out.print("How many positions for this election: ");
maxpos = sc.nextInt();
for(count = 1; count<=maxpos; count++){
System.out.print("Enter position no. " + count + ": ");
position = sc.nextLine();
sc.nextLine();
posnum = count;
System.out.print("How many seats: ");
seat = sc.nextInt();
System.out.print("Enter number of candidates: ");
maxcan = sc.nextInt();
for(cancount = 1; cancount<=maxcan; cancount++){
System.out.print("Enter candidate no. " + cancount + " name: " );
name = sc.nextLine();
num = cancount;
System.out.print("Enter candidate no. " + cancount + " party: " );
party = sc.nextLine();
c = new Candidate(name, num, position, posnum, seat, party);
list.add(c);
}
}
}while(!(count > maxpos));
for(int i = 0; i<list.size(); i++){
list.get(i).displayInfo();
}
}
}
答案 0 :(得分:1)
您可以使用DataInputStream的readLine()
,而不是使用Scanner DataInputStream din=new DataInputStream(System.in);
System.out.print("Enter number of candidates: ");
int maxcan =Integer.parseInt(din.readLine());
答案 1 :(得分:1)
每当您使用nextInt()
时,都需要在其后面放置nextLine()
System.out.print("How many seats: ");
seat = sc.nextInt();
sc.nextLine();
System.out.print("Enter number of candidates: ");
maxcan = sc.nextInt();
sc.nextLine();
这将消耗流
中未使用的\n
字符