【问题标题】:having some trouble with a while loop, and getting an if statement to executewhile 循环有一些问题,并得到一个 if 语句来执行
【发布时间】:2022-01-08 14:56:12
【问题描述】:

这是我们在本书最后一章中所做的练习。我涵盖了所有内容,除了 if 语句要求输入跟随逗号后的数字。

例如:John Doe,九岁

输出应该触发,逗号应该跟在整数后面。我试图让 if 语句至少认识到如果逗号后的输入不是数字,那么输出 if 语句应该触发但我不能。

至少有效的是带有多个逗号的输入语句。

预期的格式应该是:

简·多伊,9 岁

while (!datapoint.equals("-1")) {
      


  
  System.out.println("Enter a data point (-1 to stop input):");
  datapoint = scnr.nextLine();
  
  
  int commaCount = 0;
  
  for( int i= 0; i < datapoint.length(); i++)
  {
      if(datapoint.charAt(i) == ',')
          commaCount++;
  }
  
  if (commaCount > 1) {
      
      System.out.println("Error: Too many commas in input.");
      
  }
  
  if (datapoint.equals("-1")) {
      
      break;
      
  }
  
  if (!datapoint.contains(",")) {
      
      System.out.println("Error: No comma in string.");
      
  }


  
    
  
  if (datapoint.contains(",")) {
      
  String[] values = datapoint.split(",");     
  
  temp1 = values[0];
  temp2 = values[1];
  
  temp1 = temp1.replace(",", "");  // commma removed   ex/ Jane Austen
  temp2 = temp2.replace(" ", "");  // space removed    ex/ 6 
  
  String trigger = temp2;
  
  
  if (values.length == 2)  {
  
  
  if (temp2.length() > 2)   {    //if datapoint does not contain a number after commma
      
      
    System.out.println("Error: Comma not followed by an integer.");  
      
      
      
    }
  
  
  if (trigger.length() < 3) {
      
  int convert = Integer.parseInt(temp2);  // converts string to integer   
  
  System.out.println("Data string: " + temp1); 
  System.out.println("Data integer: " + convert);  // 2 
  
  names.add(temp1);
  ints.add(convert);
  
  }
  
  }
  
  }
       
  
  System.out.println();
  
  }

【问题讨论】:

    标签: java loops while-loop


    【解决方案1】:

    停下来,后退一步,深呼吸……我最近似乎经常这么说。

    分解问题,然后一步一步地尝试解决每个问题,而不是尝试做整个事情,因为你的困惑,我也困惑。

    如果我们假设Jane Doe, 9 是一个有效的格式,那么我们可以从那里开始。

    我们可以简单地将逗号上的String 拆分为...

    String[] parts = value.split(",");
    

    基于“有效”输入,我们最终会得到["Jane Doe", " 9"],亲爱的。所以我们可以使用类似的东西来做一个基本的验证......

    if (parts.length == 2) {
        
    } else {
        System.out.println("Invalid input, expecting [String],[int]");
    }
    

    好的,亲爱的。现在我们可以验证String的各个部分

    首先,我们应该检查名称是否为空。然后我们应该尝试确定第二部分是否为整数。不,这是我认为人们错过的一个巧妙技巧 - 您可以使用多个 Scanner 并使用它来验证 String ?

    if (parts[0].isBlank()) {
        System.out.println("Name can not be blank");
    } else {
        Scanner parser = new Scanner(parts[1].trim());
        if (parser.hasNextInt()) {
            int intValue = parser.nextInt();
        } else {
            System.out.println("[" + parts[1] + "] is not a valid integer");
        }
    }
    

    现在,我们可以进行一些快速验证...

    String value = "Jane Doe, 9";
    String[] parts = value.split(",");
    if (parts.length == 2) {
        if (parts[0].isBlank()) {
            System.out.println("Name can not be blank");
        } else {
            Scanner parser = new Scanner(parts[1].trim());
            if (parser.hasNextInt()) {
                int intValue = parser.nextInt();
                System.out.println(parts[0] + " = " + intValue);
            } else {
                System.out.println("[" + parts[1] + "] is not a valid integer");
            }
        }
    } else {
        System.out.println("Invalid input, expecting [String],[int]");
    }
    

    只需更改 value 变量并仔细检查您的...我的逻辑,快速简单且干净。

    一旦你有了它,你就可以开始担心包括循环和从其他来源获取输入......

    老实说,我认为do-while 被低估了。想想看,你必须至少做一次循环的交互,那为什么要在一开始就检查退出条件!?

    boolean stop = false;
    do {
        System.out.println("Enter a data point (-1 to stop input):");
        String value = scnr.nextLine();
        // Handle the exit condition first, get it out of the way
        if ("-1".equals(value)) {
            stop = true;
        } else {
            String[] parts = value.split(",");
            if (parts.length == 2) {
                if (parts[0].isBlank()) {
                    System.out.println("Name can not be blank");
                } else {
                    Scanner parser = new Scanner(parts[1].trim());
                    if (parser.hasNextInt()) {
                        int intValue = parser.nextInt();
                        System.out.println(parts[0] + " = " + intValue);
                    } else {
                        System.out.println("[" + parts[1] + "] is not a valid integer");
                    }
                }
            } else {
                System.out.println("Invalid input, expecting [String],[int]");
            }
        }
    } while (!stop);
    

    【讨论】:

    • 我查看了您的代码以及最终使用parts.length 对我有利的事情。查看我的最终代码 Mad。现在可以了。
    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 2021-04-25
    • 2015-05-19
    • 2018-05-27
    • 1970-01-01
    相关资源
    最近更新 更多