0

我在将字符串和双精度传递给另一个类时遇到问题,因为它一直以双倍成本 = input.nextDouble(); 崩溃。另外,我想知道我在公共布尔 addPARTDETAILS(String partDESCRIPTION, double partCOST) 中使用的附加方法是否正确。

例如。如果用户输入零件和成本,我希望它将其存储在列表中并打印出来并附加成本。

使用的零件:

  • 刹车片(50.00 美元)
  • 制动液(25.00 美元)

笔记。假设我已经声明了所有变量和数组。

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;
    }
}
4

3 回答 3

2

它继续以双倍成本崩溃 = input.nextDouble();。

您的 JVM 崩溃的可能性很小。您更有可能得到一个您没有仔细阅读并且忘记包含在您的问题中的异常。

您的代码很可能不正确,因为您可能误解了扫描仪的工作原理。因此,当您尝试读取双精度数时,输入中没有双精度数。我怀疑您想在 readDouble() 之后调用 nextLine() 以消耗该行的其余部分。

我建议您在调试器中逐步执行代码,以更好地了解它的实际作用。

于 2013-04-08T07:15:24.057 回答
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()
于 2013-04-08T07:19:24.003 回答
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()

因为==检查字符串是否实际上指向完全相同的对象(除非您=在某个点直接或间接地将一个对象分配给另一个对象,否则不会发生这种情况),而不仅仅是它们是否具有相同的文本(这equals就是为了)。

于 2013-04-08T07:49:42.213 回答