2016-10-18 26 views
-1

私が取り組んでいるプロジェクトの割り当ては、ユーザーが郵便番号を入力できるようにし、プログラムが出力にバーコードを提供できるようにすることです。たとえば、95014のバーコードは、 "|:| ::: |:|:||||||||||||"でなければなりません。これはすべて、私が持っているテーブルに基づいています。これは、それぞれの番号が何であるべきかを示しています(case文で示されています)。これは私がその部分のために書いたコードです:ユーザーが郵便番号を入力した後、私のテスタークラスがこのクラスを呼び出すときにスイッチケースでエラー...何も返さないコード

public class Zipcode{ 

private String zipcode = ""; 
private String barcode = ""; 
private int zipnum = 0; 

public Zipcode(int zip_number){ 
    zipnum = zip_number; 
} 

public void createBarcode(){ 
    while (zipnum > 0){ 
     switch (zipnum % 10) 
     { 
      case 0: 
       barcode = "||:::"; 
       break; 
      case 1: 
       barcode = ":::||"; 
       break; 
      case 2: 
       barcode = "::|:|"; 
       break; 
      case 3: 
       barcode = "::||:"; 
       break; 
      case 4: 
       barcode = ":|::|"; 
       break; 
      case 5: 
       barcode = ":|:|:"; 
       break; 
      case 6: 
       barcode = ":||::"; 
       break; 
      case 7: 
       barcode = "|:::|"; 
       break; 
      case 8: 
       barcode = "|::|:"; 
       break; 
      case 9: 
       barcode = "|:|::"; 
       break; 
      default: 
       break; 
     } 
     barcode += barcode; 
     zipnum = zipnum/10; 
    } 
} 

public String getBarcode(){ 
    return barcode; 
    } 
} 

しかし、何も結果として、最大来ることはありません。助けてください!なぜ何も返されないのですか?私は何が間違っているのか分かりません。まず郵便番号インスタンスを作成

+1

あなたは 'barcode'は' "" 'として宣言されていることを表示され、'、あなたが決して) 'createBarcode(コールしたことがない場合は、'#のcreateBarcode' – Rogue

+0

を呼び出すことはありません何も印刷しない –

+1

デバッグしよう –

答えて

-1

、郵便番号コード=郵便番号(9)

その後、私の場合にはcode.createBarcodeは()

が次にあなたがgetBarcodeをプリントアウトすることができますので、そのインスタンスのcreateBarcode()を呼び出し() 方法。

REMEMBER、getBarcode()はバーコード付きの文字列のみを返しますが、印刷しません。それを印刷するには、印刷を使用する必要があります。

例:あなたのSystem.out.println再割り当て(code.getBarcode())

3

注意各スイッチケースブロックにバーコード変数と最終的に再びそれ自体を追加します。

あなたは、メソッド内の一時的な変数でそれを行うことができます。

public void createBarcode(){ 
    String tempBarcode = ""; 
    ... 
     case 0: 
      tempBarcode = "||:::"; 
      break; 
    .... 
    barcode += tempBarcode; 

しかし、私はきれいな解決策は、任意のクラス変数の依存関係なしにユーティリティメソッドとしてそれを使用することだと思う:

public static String calculateBarcode(int zipNumber) { 
    StringBuilder barcode = new StringBuilder(); 
    while (zipNumber > 0) { 
     switch (zipNumber % 10) { 
      case 0: 
       barcode.append("||:::"); 
       break; 
      case 1: 
       barcode.append(":::||"); 
       break; 
      ... 
      ... 
      default: 
       break; 
     } 
     zipNumber = zipNumber/10; 
    } 
    return barcode.toString(); 
} 

シンプルなテストケース:

public static void main(String[] args) { 
    System.out.println(ZipcodeUtil.calculateBarcode(95014)); 
    /* Output: :|::|:::||||::::|:|:|:|:: */ 
} 
+0

スイッチの場合、 'barCode + =" || ::: ";"という方が簡単です。 –

+0

また、 'createBarcode'から' String'を返す方が良いです。メンバ変数を使用すると、処理が面倒になります。 –

+0

合意。私は、バーコード変数に新しい部分的な値を再割り当てしたくないことを指摘しようとしていました。 – arkki

0

あなたは電子上のzip値を追加されていません非常に繰り返し。あなたは

... 
     case 0: 
       barcode = "||:::"; 
       break; 
    ... 

このステップで、ここで値をオーバーライドしているとして、値が代わりに現在の反復がコード値

public class Zipcode { 

    private String zipcode = ""; 
    private String barcode = ""; 
    private int zipnum = 0; 

    public Zipcode(int zip_number) { 
     zipnum = zip_number; 
    } 

    public void createBarcode() { 
     String temp_barcode = ""; 
     while (zipnum > 0) { 
      System.out.println(zipnum % 10); 
      switch (zipnum % 10) { 
      case 0: 
       temp_barcode = "||:::"; 
       System.out.println(0); 
       break; 
      case 1: 
       temp_barcode = ":::||"; 
       System.out.println(1); 
       break; 
      case 2: 
       temp_barcode = "::|:|"; 
       System.out.println(2); 
       break; 
      case 3: 
       temp_barcode = "::||:"; 
       System.out.println(3); 
       break; 
      case 4: 
       temp_barcode = ":|::|"; 
       System.out.println(4); 
       break; 
      case 5: 
       temp_barcode = ":|:|:"; 
       System.out.println(5); 
       break; 
      case 6: 
       temp_barcode = ":||::"; 
       System.out.println(6); 
       break; 
      case 7: 
       temp_barcode = "|:::|"; 
       System.out.println(7); 
       break; 
      case 8: 
       temp_barcode = "|::|:"; 
       System.out.println(8); 
       break; 
      case 9: 
       temp_barcode = "|:|::"; 
       System.out.println(9); 
       break; 
      default: 
       break; 
      } 
      barcode += temp_barcode; 
      System.out.println(barcode); 
      zipnum = zipnum/10; 
     } 
    } 

    public String getBarcode() { 
     return barcode; 
    } 

    public static void main(String args[]) { 
     Zipcode z = new Zipcode(95014); 
     z.createBarcode(); 
     System.out.println(z.getBarcode()); // output: :|::|:::||||::::|:|:|:|:: 
    } 
} 
0

はこのよう

 case 0: 
      barcode += "||:::"; 
      break; 
     case 1: 
      barcode += ":::||"; 
      break; 
     case 2: 
      barcode += "::|:|"; 
      break; 
     case 3: 
      ..... 
      ..... 
      ..... 
barcodeを追加ジップ保存するために一時的な変数を使用して迷子にされます

この行を削除してください

 barcode += barcode; 

これが問題を解決します。

0

バーコード変数がコードに上書きされるので、createBarcodeメソッドにローカル変数を追加してください。この方法を試してください。

public class Zipcode{ 

private String zipcode = ""; 
private String barcode = ""; 
private int zipnum = 0; 

public static void main(String[] a){ 
    Zipcode z = new Zipcode(1568); 
    System.out.println(z.zipnum); 
    z.createBarcode(); 
    System.out.println(z.zipnum); 
    System.out.println(z.getBarcode()); 
} 

public Zipcode(int zip_number){ 
    zipnum = zip_number; 
} 

public void createBarcode(){ 
    while (zipnum > 0){ 
     String barcode; 
     switch (zipnum % 10) 
     { 
      case 0: 
       barcode = "||:::"; 
       break; 
      case 1: 
       barcode = ":::||"; 
       break; 
      case 2: 
       barcode = "::|:|"; 
       break; 
      case 3: 
       barcode = "::||:"; 
       break; 
      case 4: 
       barcode = ":|::|"; 
       break; 
      case 5: 
       barcode = ":|:|:"; 
       break; 
      case 6: 
       barcode = ":||::"; 
       break; 
      case 7: 
       barcode = "|:::|"; 
       break; 
      case 8: 
       barcode = "|::|:"; 
       break; 
      case 9: 
       barcode = "|:|::"; 
       break; 
      default: 
       barcode = ""; 
       break; 
     } 
     this.barcode += barcode; 
     zipnum = zipnum/10; 
    } 
} 

public String getBarcode(){ 
    return barcode; 
} 

}

関連する問題