-1

私は長い間プログラミングを行っていませんが、プログラム内でメソッドを宣言し、プログラムでこのメソッドを使用するのはこれが初めてです。その単純さでは、プログラムはユーザーに 5 桁の郵便番号を入力させ、私が作成したメソッドは、郵便番号がわずか 5 文字であり、すべて数字であることを確認します。郵便番号に何を入力してもプログラムでメソッドを使用すると、while ステートメントが実行され、郵便番号を再度入力するように求められます。これは、5 文字以外の文字列または数字のみの文字列を入力した場合にのみ発生します。ただし、現在、実際の郵便番号を入力しても発生しているため、メソッドに問題があると思われます。質問ではできるだけ明確にしようとしましたが、さらに明確にする必要がある場合は、明確にするよう努めることができます。あなたが提供できる情報をいただければ幸いです。これが私のコードです:

import java.util.Scanner;

public class BarCode {
    public static void main(String[] args) {

        String zipcode;

        Scanner in = new Scanner(System.in);
        System.out.println("Please enter a 5 digit zipcode: ");
        zipcode = in.nextLine();

        while (checkInput(zipcode) == false) {
            System.out.println("You did not enter a 5 digit zipcode: ");
            zipcode = in.nextLine();
        } // end while

    } // ends main

    public static boolean checkInput(String zipcode) {
        boolean zipcodeLength = true;
        boolean zipcodeDigits = true;
        if (zipcode.length() != 5) {
            zipcodeLength = false;
        } // end if statement
        for (int i = 0; i <= zipcode.length(); i++) {
            if (!Character.isDigit(i)) {
                zipcodeDigits = false;
            } // end if statement
        } // end for statement
        if (zipcodeLength == false || zipcodeDigits == false) {
            return false;
        } // end if statement
        else {
            return true;
        } // end else statement
    } // end checkInput
}
4

7 に答える 7

5

これはあなたの問題です:

if(!Character.isDigit(i))

する必要があります

if(!Character.isDigit(zipcode.charAt(i)))
于 2012-10-16T18:49:35.257 に答える
1
import java.util.Scanner;

public class BarCode{ public static void main(String[] args){

    String zipcode;
    Scanner in = new Scanner(System.in);
    System.out.println("Please enter a 5 digit zipcode: ");
    zipcode = in.nextLine();
    while (checkInput(zipcode)==false){
        System.out.println("You did not enter a 5 digit zipcode: ");
        zipcode = in.nextLine();
    }
}


public static boolean checkInput(String zipcode){
    boolean zipcodeLength = true;
    boolean zipcodeDigits = true;
    if (zipcode.length() != 5){
        zipcodeLength = false;
    } // end if statement
    for (int i=0; i<zipcode.length();i++){
        if(!Character.isDigit(zipcode.charAt(i))){
            zipcodeDigits = false;
        }
    }
    return zipcodeLength && zipcodeDigits;
    } // end checkInput
}
于 2012-10-16T18:51:03.963 に答える
0

falseブール値をブール変数に格納する必要はありません。郵便番号が無効であることに気付いた瞬間に戻ってください。

そして、あなたはすべきです: -

!Character.isDigit(zipcode.charAt(i))

代わりに: -

!Character.isDigit(i)

したがって、次のようにメソッドを変更できます。

public static boolean checkInput(String zipcode){

  if (zipcode.length() != 5){
    return false;
  } 

  for ( int i = 0; i < zipcode.length(); i++){
    if(!Character.isDigit(zipcode.charAt(i))){
      return false;
    } 
  } 

  return true;
}

また、する必要はありません :- booleanVar == false。するだけです:-!booleanVarそれで十分です。

于 2012-10-16T18:50:07.893 に答える
0
 public static boolean checkInput(String zipcode){
      if (zipcode.length() != 5){
        return false;
      } 
      for ( int i=0; i<zipcode.length();i++){
char charAt = zipcode.charAt(i);
        if(!Character.isDigit(charAt)){
          return false;
        } 
      } 
     return true;
    } 

i明らかに数字になるため、数字であるかどうかを確認する代わりに charAt を使用する必要がありました。

于 2012-10-16T18:50:27.847 に答える
0

2 つの問題があります。

<=1 つ目は、必要なときに行くということです<

zipcode.charAt(i)2 つ目は、 の代わりにチェックする必要があることですi。確認iすると、入力した郵便番号に関係なく、5 桁の郵便番号の 0 ~ 4 の数字 (コードでは 5) が確認されます。

したがって、これらの2行は次のようになります

for ( int i=0; i<zipcode.length();i++){
    if(!Character.isDigit(zipcode.charAt(i))){

または、私は個人的にこのメソッドを次のようにコーディングします。

public static boolean checkInput(String zipcode){
     if(zipcode.length() != 5) return false; // bad length
     for(int i = 0; i < zipcode.length(); i++) {
         if(!Character.isDigit(zipcode.charAt(i)) // bad digit
             return false;
     }
     return true; // if no bad condition, it's good
}
于 2012-10-16T18:55:48.120 に答える
0
  while (zipcode.matches("[0-9]{5}"))==false){
    System.out.println("You did not enter a 5 digit zipcode: ");
      zipcode = in.nextLine();
  } 
于 2012-10-16T18:57:05.740 に答える
0
!Character.isDigit(i)

それは私には間違いのように見えます。iタイプはint:

for (int i = 0; i <= zipcode.length(); i++) {
// ...
}

だからあなたは呼んでいないCharacter.isDigit(char)、あなたは呼んでいるCharacter.isDigit(int)。2 つのメソッドの動作は異なります。1 つはテキスト文字を処理し、もう 1 つは数値の Unicode 値を処理します。これを試して:

System.out.println("= char '1' =");
System.out.println(Character.isDigit('1')); // true

System.out.println("= int 1 =");
System.out.println(Character.isDigit(1)); // false

System.out.println("= Unicode 31h (49) =");
System.out.println(Character.isDigit('\u0031')); // true

System.out.println("= int 49 =");
System.out.println(Character.isDigit(49)); // true

そして、次の出力が得られます。

= char '1' =
true
= int 1 =
false
= Unicode 31h (49) =
true
= int 49 =
true
于 2012-10-16T19:01:01.560 に答える