我是一名刚接触Java的C ++程序员,并且在将字符串作为字段(或属性或其他类)时遇到麻烦。
import java.util.Scanner;
class Student{
String name;
static int count=0;
int regno;
double marks;
Student(){
count++;
}
static void getCount(){
System.out.println("Count is "+count);
}
void setName(String n1){
name=n1;
}
void setMarks(double m1){
marks=m1;
}
void setRegNo(int rno){
regno=rno;
}
String getName(){
return name;
}
int getRegNo(){
return regno;
}
double getMarks(){
return marks;
}
}
class Demo{
int i;
Student s[]=new Student[3];
Scanner in=new Scanner(System.in);
Demo(){
for(i=0;i<3;i++){
s[i]=new Student();
System.out.println("Enter name of student "+(i+1)+" :");
s[i].setName(in.nextLine());
System.out.println("Enter Reg. No. of student "+(i+1)+" :");
s[i].setRegNo(in.nextInt());
System.out.println("Enter marks of student "+(i+1)+" :");
s[i].setMarks(in.nextDouble());
}
}
public void Display(){
System.out.println("Students with marks >70 : ");
System.out.println("RegNo\tName\tMarks\t");
for(i=0;i<3;i++){
System.out.println(s[i].getRegNo()+"\t"+s[i].getName()+"\t"+s[i].getMarks());
}
}
}
class P4{
public static void main(String args[]){
Demo d=new Demo();
d.Display();
}
}
输出:
Enter name of student 1 :
1
Enter Reg. No. of student 1 :
1
Enter marks of student 1 :
100
Enter name of student 2 :
Enter Reg. No. of student 2 :
2
Enter marks of student 2 :
100
Enter name of student 3 :
Enter Reg. No. of student 3 :
3
Enter marks of student 3 :
100
Students with marks >70 :
RegNo Name Marks
1 1 100.0
2 100.0
3 100.0
麻烦: 从for循环的第二次迭代开始,程序直接要求我输入regno并标记跳过名称String.I不理解它是如何工作的第一次迭代而不是其他的。请解释我这里出了什么问题
答案 0 :(得分:1)
我猜这是与许多人一样的问题。 C中的scanf
,即前一个输入的结束换行符仍在输入缓冲区中,这导致nextLine
函数将此换行符视为空行。
您需要一种在输入字符串之前丢弃前导空格的方法。
答案 1 :(得分:0)
在in.nextLine()
s[i].setMarks(in.nextDouble());
发生了什么:
for(i=0;i<3;i++){
s[i]=new Student();
System.out.println("Enter name of student "+(i+1)+" :");
s[i].setName(in.nextLine()); // second time around, you read the newline character
System.out.println("Enter Reg. No. of student "+(i+1)+" :");
s[i].setRegNo(in.nextInt());// once you press "enter" here, the newline
System.out.println("Enter marks of student "+(i+1)+" :");
s[i].setMarks(in.nextDouble());// once you press "enter" here, the newline character is added to the input stream
}
答案 2 :(得分:0)
问题在于您将nextInt()
/ nextDouble()
与nextLine()
混合在一起。
当您输入int
/ double
时,后面会有一个新行,当您在下一次迭代中调用nextLine()
时,它会读取此新行。< / p>
解决方法是在致电nextLine()
/ nextInt()
后致电nextDouble()
(并弃掉结果)。
这是一个展示问题(和解决方案)的简单代码:
try (Scanner in = new Scanner(System.in)) {
System.out.println("Int:");
in.nextInt();
// in.nextLine(); // uncomment to fix the problem
System.out.println("Line:");
in.nextLine();
}