【问题标题】:What is the correct syntax for validating user input?验证用户输入的正确语法是什么?
【发布时间】:2016-12-19 19:45:58
【问题描述】:

我的代码使用扫描仪创建一组运动结果,用户以这种格式输入输入“主队:客队:主队比分:客队比分” - 每个部分都拆分为数组中的字符串。如果缺少一个部分,我想创建一条错误消息,例如每个相应部分的“错误,主队似乎丢失”;

我是一个初学者,并且一直在尝试在 for 循环中放置一个 else-if 条件来帮助生成此错误消息,但是根据我收到的错误数量来判断我做错了什么(删除此标记)。

【问题讨论】:

  • 你需要说出你遇到了什么错误。
  • 这不是获取扫描仪输入的非常常见的方法,绝对不是最简单的方法。您应该使用正确的 scanner.next 函数获取 4 个单独的变量。当您可以要求每个人时,为什么要要求某人一次将所有内容都放入?这样可以确保不会输入任何值。
  • @s.gang 你能帮我解决这个问题吗,我是 Java 新手

标签: java arrays loops if-statement for-loop


【解决方案1】:

此代码将帮助您的程序根据您在问题中的要求验证用户输入,如果用户遗漏了任何输入,则会向他报告:

 import java.util.Scanner;

 public class Test4 {

public static void ismissing(int i)
{
    switch(i)
    {
      case 0:
      System.out.println("Home team missing");
      break;

      case 1:
      System.out.println("Away team missing");
      break;

      case 2:
      System.out.println("Home score missing");
      break;

      case 3:
      System.out.println("Away score missing");
      break;
    }
}

public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);    
    System.out.println("Input as follows; ");    
    System.out.println("Home team : Away team : Home score : Away score");
    String str=scanner.nextLine();

    String array[]=str.split(":");



    for(int i=0;i<array.length;i++)
    {
        if(array[i].equals(" "))
        {
            ismissing(i);
            System.exit(0); //will exit program if something is missing
        }
    }

        System.out.println("Correct Input");

 }

}

【讨论】:

    【解决方案2】:

    如果您要创建大量游戏,我建议您创建一个 Game 类,因为这样可以更轻松地管理 Game 对象,而不是 2 个字符串和 2 个整数值。使用Game 对象,您还可以使用Game 对象的toString 方法输出所需的字符串输出。在获取用户输入时,我使用的条件是团队名称不能为空,团队分数不能小于 0。如果用户输入为空字符串或无效整数,那么我们只需输出一条消息指示无效输入和让用户再试一次,直到他们得到有效的输入。如果您想在这种情况下退出,您可以更改它以适应用户输入无效数据时程序的正常退出。

    我主要做了两种方法,一种是获取有效的 String 团队名称,另一种是获取有效的 Integer 分数。同样,如果用户输入无效数据,我们将循环直到输入有效。

    游戏类:

    public class Game
    {
      String homeTeam = "";
      String awayTeam = "";
      int homeScore = -1;
      int awayScore = -1;
    
      public Game(String inHomeTeam, int inHomeScore, String inAwayTeam, int inAwayScore)
      {
        super();
        this.homeTeam = inHomeTeam;
        this.awayTeam = inAwayTeam;
        this.homeScore = inHomeScore;
        this.awayScore = inAwayScore;
      }
    
      @Override
      public String toString()
      {
        return homeTeam + "[" + homeScore + "] | " + awayTeam + "[" + awayScore + "]";
      }
    
      public String getHomeTeam() {
        return homeTeam;
      }
      public void setHomeTeam(String homeTeam) {
        this.homeTeam = homeTeam;
      }
      public String getAwayTeam() {
        return awayTeam;
      }
      public void setAwayTeam(String awayTeam) {
        this.awayTeam = awayTeam;
      }
      public int getHomeScore() {
        return homeScore;
      }
      public void setHomeScore(int homeScore) {
        this.homeScore = homeScore;
      }
      public int getAwayScore() {
        return awayScore;
      }
      public void setAwayScore(int awayScore) {
        this.awayScore = awayScore;
      }  
    }
    

    主要

    public class Main
    {
      static Scanner scanner = new Scanner(System.in);
      static Game[] allGames;
      static String homeTeam = "";
      static String awayTeam = "";
      static int homeScore = -1;
      static int awayScore = -1;
      static int numberOfGames = 0;
    
      public static void main(String[] args)
      {
        numberOfGames = GetUserInt("How many games do you want to enter - 100 or less: ");
        if (numberOfGames > 100)
          numberOfGames = 100;
        allGames = new Game[numberOfGames];
    
        for (int i = 0; i < numberOfGames; i++) {
          homeTeam = GetUserString("Enter the home team name: ");
          homeScore = GetUserInt("Enter the home team score: ");
          awayTeam = GetUserString("Enter the away team name: ");
          awayScore = GetUserInt("Enter the away team score: ");
          allGames[i] = new Game(homeTeam, homeScore, awayTeam, awayScore);
        }
        // output the users games
        for(Game curGame : allGames)
        {
          if (curGame != null)
            System.out.println(curGame.toString());
        }
      }
    
      private static String GetUserString(String prompt)
      {
        String input = "";
        while(true) {
          System.out.print(prompt);
          input = scanner.nextLine();
          if (input.length() > 0)
            return input;
          else
            System.out.println("Invalid input: Can not be empty string!");
        }
      }
    
      private static int GetUserInt(String prompt)
      {
        String input = "";
        while(true) {
          System.out.print(prompt);
          input = scanner.nextLine();
          if (input.length() > 0) {
            if (isValidInt(input)) {
              int value = Integer.parseInt(input);
              if (value >= 0) {
                return value;
              }
              else {
                System.out.println("Invalid input: Score can not be negative");
              }
            }
            else {
              System.out.println("Invalid input: Score must be a valid integer");
            }
          }
          else {
            System.out.println("Invalid input: Score can not be empty");
          }
        }
      }
    
      private static boolean isValidInt(String inString)
      {
        try {
          Integer.parseInt(inString);
          return true;
        }
        catch (NumberFormatException e) {
          return false;
        }
      }
    }
    

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      您可以做一些事情,例如使用 if 语句检查值。你可以这样说:

      if(stringIsEmpty)
      {
          print ("Error");
      } 
      else
      {
         /*Keep executing program*/
      }
      

      您也可以使用 try/catch 块。这可能会有所帮助,因为如果字符串为空(空),您可以抛出空指针异常并按照您想要的方式定义它,如下所示:

      try
      {
          /*blank string code*/
      }catch(NullPointerException e)
      {
          System.out.println("Empty strings are not allowed");
      }
      

      【讨论】:

      • 非常有帮助,你能帮我语法吗?我不确定在我的代码中放置它的位置
      • 当然我会更新我的答案并尽力解决问题
      • 体育比赛的结果,例如,如果输入是“主队:客队:主队得分:客队得分”,则输出将是“主队 [主队得分] | 客队 [客队得分]
      • 所以您只希望在每场比赛或一场比赛之后输出?
      • 我想让它做尽可能多的用户想要的游戏(数组是 100 大,所以这是限制) - 如果缺少某些东西,我希望它停止并显示错误消息
      猜你喜欢
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多