Java 第二种方法扫描仪不';行不通
当我执行下面的代码时,它为Java 第二种方法扫描仪不';行不通,java,java.util.scanner,Java,Java.util.scanner,当我执行下面的代码时,它为inputCar1方法正确地获取输入,但在inputCar2方法中,它执行除第一个scanner命令之外的所有命令。如果我使用这个命令两次,那么它的工作原理与我预期的一样,但不应该如此。为了更好地理解我的问题,我附加了代码和输出 打印类: package TestPackage; /** * Created by km.muzahid on 03-May-15. */ public class PrintClass { public static void
inputCar1
方法正确地获取输入,但在inputCar2
方法中,它执行除第一个scanner命令之外的所有命令。如果我使用这个命令两次,那么它的工作原理与我预期的一样,但不应该如此。为了更好地理解我的问题,我附加了代码和输出
打印类:
package TestPackage;
/**
* Created by km.muzahid on 03-May-15.
*/
public class PrintClass {
public static void print(Object value){
System.out.print(value);
}
public static void println(Object value)
{
System.out.println(value);
}
}
汽车等级:
package TestPackage;
/**
* Created by km.muzahid on 03-May-15.
*/
public class CarClass {
public String manufacturerName;
public int CarCC;
public float CarWeight;
public float FuealAmount;
public CarClass()//constructor
{
CarCC=0;
CarWeight=0;
FuealAmount=0;
}
public CarClass(String CarNumber,String Name,int cc,float fuel,float weight)//constructor
{
PrintClass ShowMassage=new PrintClass();
ShowMassage.println(CarNumber +"Car Manufacturer Name : "+Name+"\nCC of Car : "
+cc+"\nAmount of fuel of car : "+fuel+"\nWeight of car : "+weight);
}
}
问题代码:
package TestPackage;
import java.util.Scanner;
/**
* Created by km.muzahid on 03-May-15.
*/
public class testclass {
static private PrintClass ShowMassage;
public static Scanner MyScanner=new Scanner(System.in);
public static CarClass car=new CarClass();
public static CarClass car2nd=new CarClass();//create new object from carclass for 2nd car
public static void main(String[] args)
{
//1st car
inputCar1("Enter for first car: ");
CarClass SeeCar1=new CarClass("1st car details: \n",car.manufacturerName,car.CarCC,car.FuealAmount,car.CarWeight);
// //2nd car
CarClass See=new CarClass("2nd car details: \n",car2nd.manufacturerName,car2nd.CarCC,car2nd.FuealAmount,car2nd.CarWeight);
}
protected static void inputCar1(String Massege)
{
ShowMassage.println(Massege);
ShowMassage.println("Enter Name of car manufactueing : ");
car.manufacturerName=MyScanner.nextLine();
ShowMassage.println("Enter weight of car :");
car.CarWeight=MyScanner.nextFloat();
ShowMassage.println("Enter the amount of Fuel : ");
car.FuealAmount= MyScanner.nextFloat();
ShowMassage.println("Enter the car CC : ");
car.CarCC= MyScanner.nextInt();
inputCar2("Enter For 2nd Car : ");
}
protected static void inputCar2(String Massege)
{
ShowMassage.println(Massege);
ShowMassage.println("Enter Name of car manufactueing : ");
//car2nd.manufacturerName=MyScanner.nextLine();
car2nd.manufacturerName=MyScanner.nextLine();//problem indicated
ShowMassage.println("Enter weight of car 2nd :");
car2nd.CarWeight=MyScanner.nextFloat();
ShowMassage.println("Enter the amount of Fuel 2nd : ");
car2nd.FuealAmount= MyScanner.nextFloat();
ShowMassage.println("Enter the car 2nd CC : ");
car2nd.CarCC= MyScanner.nextInt();
CarClass SeeCar1=new CarClass("1st car details: \n",car.manufacturerName,car.CarCC,car.FuealAmount,car.CarWeight);
//2nd car
CarClass See=new CarClass("2nd car details: \n",car2nd.manufacturerName,car2nd.CarCC,car2nd.FuealAmount,car2nd.CarWeight);
}
}
输出:
Enter for first car:
Enter Name of car manufactueing :
lamborghini
Enter weight of car :
2222
Enter the amount of Fuel :
2.369
Enter the car CC :
236
Enter For 2nd Car :
Enter Name of car manufactueing :
Enter weight of car 2nd :
263
Enter the amount of Fuel 2nd :
3
Enter the car 2nd CC :
56
1st car details:
Car Manufacturer Name : lamborghini
CC of Car : 236
Amount of fuel of car : 2.369
Weight of car : 2222.0
2nd car details:
Car Manufacturer Name :
CC of Car : 56
Amount of fuel of car : 3.0
Weight of car : 263.0
1st car details:
Car Manufacturer Name : lamborghini
CC of Car : 236
Amount of fuel of car : 2.369
Weight of car : 2222.0
2nd car details:
Car Manufacturer Name :
CC of Car : 56
Amount of fuel of car : 3.0
Weight of car : 263.0
问题是,当按ENTER键时,会向输入缓冲区发送一个新行(
'\n'
),当按ENTER键时,会向输入缓冲区发送一个新行(car.CarCC=MyScanner.nextInt()代码>,它将使用数字,但不使用新行。所以稍后,当您执行car2nd.manufacturerName=MyScanner.nextLine()时
输入缓冲区中仍有'\n'
,而nextLine()
将使用该'\n'
并立即返回空字符串
解决方案是放置一个MyScanner.nextLine()在这两行之间的某个地方编码>以使用丢失的新行。问题是,当您按ENTER键时,您会将新行('\n'
)发送到输入缓冲区,当您执行此操作时,car.CarCC=MyScanner.nextInt()代码>,它将使用数字,但不使用新行。所以稍后,当您执行car2nd.manufacturerName=MyScanner.nextLine()时
输入缓冲区中仍有'\n'
,而nextLine()
将使用该'\n'
并立即返回空字符串
解决方案是放置一个MyScanner.nextLine()代码>在这两行之间的某个地方使用丢失的新行。注意:根据java标准,变量名应以小写字母开头,类名应以大写字母开头。注意:根据java标准,变量名应以小写字母开头,类名应以大写字母开头。或始终使用nextLine()
或始终使用nextLine()
,即使您尝试获取数字(或任何内容)
Integer.parseInt(MyScanner.nextLine())代码>