2016-07-26 3 views
1

私はオブジェクトの配列を持っています。各オブジェクトにはchar値とint値が含まれています。私は、別のchar配列からの項目がオブジェクトの配列のcharメンバーのどれかと一致するかどうかをチェックするプログラムを書こうとしています。 yesの場合は、intにint値を加算します。したがって、例えば:オブジェクトの配列を反復し、メンバーを他の配列と照合/比較する

インデックスでメンバなら[I]この配列一致

char[] array = { 'a', 'r', 't', 'd', 's', 'f' }; 

からこのチャー部材のいずれかは、配列(ここで文字「R」が一致)

RomanToArabicNums [] table = { 
      new RomanToArabicNums('h', 1000), 
      new RomanToArabicNums('r', 200)  
     }; 
オブジェクト

このオブジェクト配列(この場合は200)のint値をint sumに追加します。

package romantoarabicnums;  
import javax.swing.JOptionPane;  

public class RomanToArabicNums { 
    private static String userString; 
    private static int userNumber; 
    private static char letter; 
    private static int letterNum; 

    public RomanToArabicNums (String s) throws NumberFormatException { 
     for (int i = 0; i < s.length(); i++) { 

      if (s.charAt(i) == 'M' ||s.charAt(i) == 'M' ||s.charAt(i) == 'C' ||s.charAt(i) == 'D' || 
       s.charAt(i) == 'X' ||s.charAt(i) == 'L' ||s.charAt(i) == 'V' ||s.charAt(i) == 'I') { 
       userString += s.charAt(i); 
      } 
      else {throw new NumberFormatException("Only M,C,D,X,V and I allowed");} 
     } 
    } 
    public RomanToArabicNums (int num) throws NullPointerException { 
     if (num >= 1 && num <= 3999) { 
      RomanToArabicNums.userNumber = num; 
     } 
     else {throw new NumberFormatException("numbers between 1 and 3999 only!");} 
    } 
    public RomanToArabicNums (char letter, int num) { 
     this.letter = letter; 
     this.letterNum = num; 
    } 
    public char getLetter() {return letter;} 
    public int getLetterNum() {return letterNum;} 
    public static void main(String[] args) { 
     //RomanToArabicNums r1 = new RomanToArabicNums(4080); 
     RomanToArabicNums r2 = new RomanToArabicNums("MCMXCV"); 
     //System.out.println("the roman representation is: " + r1.fromArabicToRoman()); 
     System.out.println("the arabic number is: " + r2.fromRomanToArabic("MCMXCV")); 

    } 
    /* convert Roman characters to Arabic numbers */ 
    public int fromRomanToArabic (String userString) { 
     int sum=0; 

     //char [] charArray = userString.toCharArray(); 
     RomanToArabicNums [] table = new RomanToArabicNums[7]; 
      table [0] = new RomanToArabicNums('M', 1000); 
      table [1] = new RomanToArabicNums('D', 500); 
      table [2] = new RomanToArabicNums('C', 100); 
      table [3] = new RomanToArabicNums('L', 50); 
      table [4] = new RomanToArabicNums('X', 10); 
      table [5] = new RomanToArabicNums('V', 5); 
      table [6] = new RomanToArabicNums('I', 1); 

      for (RomanToArabicNums obj : table) { 

       for (int i = 0; i < userString.length(); i++) { 
        if (userString.indexOf(i) == table[i].getLetter()) { 

        if (table[i].getLetter() < table[i+1].getLetter()) { 
         sum += table[i+1].getLetterNum() - table[n].getLetterNum(); 
        } 

        sum += table[i].getLetterNum(); 
        } 
       }  
      } 
     return sum; 
    } 
    /* converr Arabic number to Roman characters */ 
    public static String fromArabicToRoman() { 
     String roman = ""; 
     int num = userNumber; 
     while (num >= 1000) {roman += "M"; num -= 1000;} 
     while (num >= 900) {roman += "CM"; num -= 900;} 
     while (num >= 500) {roman += "D"; num -= 500;} 
     while (num >= 400) {roman += "CD"; num -= 400;} 
     while (num >= 100) {roman += "C"; num -= 100;} 
     while (num >= 90) {roman += "XC"; num -= 90;} 
     while (num >= 50) {roman += "L"; num -= 50;} 
     while (num >= 40) {roman += "XL"; num -= 40;} 
     while (num >= 10) {roman += "X"; num -= 10;} 
     while (num >= 9) {roman += "IX"; num -= 9;} 
     while (num >= 5) {roman += "V"; num -= 5;} 
     while (num >= 4) {roman += "IV"; num -= 4;} 
     while (num >= 1) {roman += "I"; num -= 1;} 

     return roman; 
    }   
} 
+0

次のようにそれはループせずに行うようにする方法があり、

は、文字列方法を提供するという事実を利用して、これを試してみてください'RomanToArabicNums'クラスの実装はどのように見えますか? – ujulu

+0

これまでに何を試しましたか?これは基本的にはchar配列の反復であり、 'table'配列を通る別のループの中にあります。 –

答えて

0
  1. がセット
  2. 反復各要素に対して各RomanToArabicNums配列
  3. からに検索配列の要素を入れて:ここ

    は完全なコードであるfromRomanToArabic()(問題の方法があります)各RomanToArabicNumsは、containsメソッドを使用して現在のcharがsearchSetに含まれているかどうかをチェックします。
0

2つ

if ((new String(charArray).contains("q"))) { 
    // do something 
} 

さらに別のオプションは、この時間indexOf()を使用して::

if (new String(charArray).indexOf('q') > -1) { 
    // do something enter code here` 
} 
+0

ansに感謝します。私が理解できなかった問題は、オブジェクトの配列内の要素をどのように指定するかを一致させる方法でした。 – zamzam

+0

By 1st 1st if((new String(charArray).contains( "r"))){ RomanToArabicNums object1 = new RomanToArabicNums ( 'h'、200); '2 により他の(R、100、 } {} 場合(新しい文字列(charArray).indexOf( RomanToArabicNumsオブジェクト2 =新しいRomanToArabicNums)' Q ')> -1){ RomanToArabicNums物体1 =新しいRomanToArabicNums(' h '、200)。 RomanToArabicNums他のオブジェクト2 =新しいRomanToArabicNums(R '、100)、 } {} 次いで RomanToArabicNums []テーブル=物体1、オブジェクト2のようなあなたの配列にobjecetsを加えます。 –

関連する問題