2016-12-19 6 views
0

私のコードはスキャナーを使用してスポーツ結果セットを作成し、ユーザーは「ホームチーム:アウェーチーム:ホームスコア:アウェイスコア」という形式で入力します。各パートは配列の文字列に分割されます。私はエラーのメッセージを作成したい場合は、例えば、 "エラー、ホームチームが欠落しているようです"というように、対応するセクションごとに1つの部分が欠落している場合です。ユーザー入力を検証する正しい構文は何ですか?

私は初心者ですが、このエラーメッセージを作成するためにforループにelse-if条件を設定しようとしていますが、私はエラーの量によって判断しています(このトークンを削除してください)。

+1

どのようなエラーが発生しているのかを伝える必要があります。 – Carcigenicate

+2

これはスキャナー入力を取得する非常に一般的な方法ではなく、間違いなく最も簡単な方法です。正しいscanner.next関数を使用して4つの別々の変数を取得する必要があります。なぜ誰かに尋ねることができるときに、一度にすべてを入れるように依頼するのですか?これにより、値を入力できなくなります。 –

+0

@ s.gangこれを手伝ってもらえますか?私はJavaを初めて使用しています –

答えて

0

if文で値を確認するなど、いくつかのことができます。

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

try/catchブロックを使用することもできます。これは、文字列は(空)nullであるため、場合、あなたはnullポインタ例外をスローし、このようなあなたが望むように、それを定義することができます助けることができる:

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

非常に役に立ちました。構文を助けてくれますか?私は自分のコードのどこに配置するのかわからないです –

+0

私は私の答えを更新し、問題を解決するために全力を尽くします – Aaron

+0

あなたのコードで何を出力しようとしていますか? – Aaron

0

このコードをあなたのプログラムは、ユーザー入力を検証するのに役立ちます入力のいずれかをユーザが見逃している場合は、あなたの質問であなたの要件に応じて、彼に報告されます。

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"); 

} 

} 
0

あなたは、多くのゲームを作成しようとしている場合は、私はあなたがGameクラスを作る推薦します2つの文字列と2つの整数値ではなく、Gameオブジェクトの管理が容易になるためです。 Gameオブジェクトでは、GameオブジェクトのtoStringメソッドを使用して、希望の文字列出力を出力することもできます。ユーザー入力を取得するとき、私が使用した基準は、チーム名を空白にすることはできず、チームの得点は0未満にならないようなものです。ユーザーが空文字列または無効な整数を入力すると、無効な入力を示すメッセージを出力し、ユーザーに有効な入力が得られるまで再試行させてください。このときに終了したい場合は、ユーザーが無効なデータを入力したときにプログラムを正常に終了するためにこれを変更することができます。

私は主に2つのメソッドを作成しました.1つは有効なStringのチーム名を取得し、もう1つはスコアの有効な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; 
    } 
    } 
} 

・ホープ、このことができます!

関連する問題