我在将字符串和double传递给另一个类时遇到问题,因为它在double cost = input.nextDouble();时继续崩溃。另外,我想知道我是否正确使用公共布尔值addPARTDETAILS(String partDESCRIPTION,double partCOST)中使用的追加方法。
例如。如果用户输入零件和成本,我希望它将其存储在列表中并打印出来并附加成本。
使用的零件:
请注意。假设我已经声明了所有变量和数组。
System.out.print("Enter registration number of vehicle");
String inputREGO = input.next();
boolean flag = false;
for(int i=0; i<6; i++){
if(inputREGO.equalsIgnoreCase(services[i].getregoNUMBER())){
System.out.print("Enter Part Description: ");
String parts = input.nextLine();
double cost = input.nextDouble();
services[i].addPARTDETAILS(parts, cost);
//System.out.println(services[i].getregoNUMBER());
flag = true;
}
}if(flag==false);
System.out.println("No registration number were found in the system.");
public boolean addPARTDETAILS(String partDESCRIPTION, double partCOST){
if(partDESCRIPTION == "" || partCOST <= 0){
System.out.println("Invalid input, please try again!");
return false;
}
else{
partCOST=0;
StringBuffer sb = new StringBuffer(40);
String[] parts = new String[50];
for (int i=0;i<parts.length;i++){
partDESCRIPTION = sb.append(partCOST).toString();
}
System.out.println(partDESCRIPTION);
totalPART+=partCOST;
return true;
}
}
答案 0 :(得分:2)
它继续以双倍成本崩溃= input.nextDouble();.
您的JVM极不可能崩溃。您更有可能获得一个您没有仔细阅读并且忘记包含在您的问题中的例外情况。
您的代码更有可能不正确,因为您可能误解了扫描仪的工作原理。因此,当您尝试读取双精度数时,输入中没有双精度数。我怀疑你想在readDouble()之后调用nextLine()来消耗该行的其余部分。
我建议您逐步调试调试器中的代码,以便更好地了解它的实际功能。
答案 1 :(得分:1)
数据相关错误。
if(flag==false);
System.out.println("No registration number were found in the system.");
应该是(因为;
):
if (!flag) {
System.out.println("No registration number was found in the system.");
}
和
partDESCRIPTION == ""
应该是:
partDESCRIPTION.isEmpty()
答案 2 :(得分:1)
只是为了扩展Joop Eggen和Peter Lawrey的答案,因为我觉得有些人可能不理解。
nextLine
与其他人无关:
nextDouble
可能会抛出NumberFormatException
因为:
next
,nextInt
,nextDouble
等不会读取以下行尾字符,因此nextLine
将读取该行的其余部分, nextDouble
会读错了。
示例:(|
表示当前位置)
开始:
|abc
123
def
456
nextLine
之后:
abc
|123
def
456
nextDouble
之后:
abc
123|
def
456
在nextLine
之后(读取该行的其余部分,其中不包含任何内容):
abc
123
|def
456
现在nextDouble
尝试阅读"def"
,这将无效。
If语句问题:
if(flag==false);
或,改写:
if(flag==false)
;
是一个带有空体的if语句。因此,后面的语句将始终执行。并且不需要执行== false
,!flag
表示相同。你想要什么:
if (!flag)
System.out.println("No registration number were found in the system.");
与==的字符串比较:
partDESCRIPTION == ""
应该是:
partDESCRIPTION.equals("")
或更好:
partDESCRIPTION.isEmpty()
因为==
检查字符串是否实际上指向完全相同的对象(除非您在某个时刻({1}}直接或间接地将其分配给另一个),否则不会发生这种情况,不仅仅是具有相同的文本(这是=
的用途)。