私はオブジェクトの配列を持っています。各オブジェクトには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;
}
}
次のようにそれはループせずに行うようにする方法があり、
は、文字列方法を提供するという事実を利用して、これを試してみてください'RomanToArabicNums'クラスの実装はどのように見えますか? – ujulu
これまでに何を試しましたか?これは基本的にはchar配列の反復であり、 'table'配列を通る別のループの中にあります。 –