Android - конвертировать арки в десятичные

1

Я создаю калькулятор для ног и дюймов. Я хочу, чтобы пользователь мог вводить информацию различными способами, такими как 1'-4-5/8 " или 1 4 5/8.

При выполнении математики вышеуказанные числа должны быть преобразованы в десятичные (1'-4-5/8 "- 16,625 в десятичных дюймах). Конечный результат будет в десятичных дюймах или затем преобразован обратно в футы и дюймы.

Как я могу разобрать архитектурные измерения и преобразовать их в десятичные дюймы?

Любая помощь будет принята с благодарностью!

Спасибо!

edit: После слишком много времени и попыток многого другого, я думаю, что у меня есть что-то, что сработает. В конечном итоге я ограничу то, как пользователь может ввести длину, поэтому я думаю, что следующее будет работать. Он не может быть оптимизирован, но это лучшее, что я могу получить прямо сейчас.

public class delim_test_cases {

    public static void main(String[] args) {

        double inches = 0;
        double feet = 0;
        double fract = 0;
        String str = "2'-3-7/8";
        String[] TempStr;
        String delimiter = ("[-]+");
        TempStr = str.split(delimiter);

        for(int i=0; i< TempStr.length ; i++ ) {

            for(int z=0; z< TempStr[i].length() ; z++ ) {

                if (TempStr[i].charAt(z) == '\'') {
                    String[] FeetStr;
                    String feetdelim = ("[\']+");
                    FeetStr = TempStr[i].split(feetdelim);
                    feet = Integer.parseInt(FeetStr[0]);
                }

                else if (TempStr[i].charAt(z) == '/') { 
                    String[] FracStr;
                    String fracdelim = ("[/]+");
                    FracStr = TempStr[i].split(fracdelim);
                    double numer = Integer.parseInt(FracStr[0]);
                    double denom = Integer.parseInt(FracStr[1]);
                    fract = numer/denom;
                }

                else  if (TempStr[i].indexOf("\'")==-1 && TempStr[i].indexOf("/")==-1) {
                    String inchStr;
                    inchStr = TempStr[i];
                    inches = Integer.parseInt(inchStr);
                }

            }
        }

        double answer = ((feet*12)+inches+fract);
        System.out.println(feet);
        System.out.println(inches);
        System.out.println(fract);
        System.out.println(answer);
    }
}
Теги:
string
if-statement

1 ответ

0
Лучший ответ

Почему бы просто не разделить ни на "-", ни на пробел, тогда у вас есть массив из 3 строк.

Итак, вы смотрите на последнего персонажа, если это одиночная цитата, затем умножьте это на 12.

Если двойная кавычка, затем разделите на "/" и просто вычислите дробь, а для числа, которое не является ни одним из них, оно равно дюйму, просто добавьте его к сумме.

Таким образом, вы не принимаете приказ или что делать, если у вас только дробные дюймы.

Просто пройдите через массив, а затем перейдите по вышеприведенному алгоритму, поэтому, если кто-то сделал

3'-4'-4/2" то вы можете легко вычислить его.

ОБНОВИТЬ:

Я добавляю код, основанный на комментарии от OP.

Вы можете обратиться к этому, чтобы получить больше идей о split.

http://www.java-examples.com/java-string-split-example

Но, в основном, просто сделайте что-то вроде этого (не проверено, просто выписано):

public double convertArchToDecimal(String instr, String delimiter) {
  String[] s = instr.split(delimiter);
  int ret = 0;
  for(int t = 0; t < s.length; t++) {
    char c = s[t].charAt(s[t] - length);
    switch(c) {
       case '\'':  //escape single quote
         String b = s[t].substring(0, s[t].length - 1).split("/");
         try {
           ret += Integer.parse(s[t].trim()) * 12;
         } catch(Exception e) { // Should just need to catch if the parse throws an error
         }
         break;
       case '"':  // may need to escape the double quote
         String b = s[t].substring(0, s[t].length - 1).split("/");
         int f = 0;
         int g = 0;
         try {
            f = Integer.parse(b[0]);
            g = Integer.parse(b[1]);
            ret += f/g;
         } catch(Exception e) {
         }
         break;
       default:
         try {
           ret += Integer.parse(s[t].trim());
         } catch(Exception e) { // Should just need to catch if the parse throws an error
         }
         break;
     }
  }
  return ret;
}

Я предпочитаю больше исключений, чем нужно, и вы можете использовать метод trim() больше, чем я, чтобы разделить пробелы перед разбором, чтобы защитить от 3/5 " например.

Проходя в пространстве или тире, это должно быть достаточно для ваших нужд.

Вы также можете округлить до некоторых значимых цифр, в противном случае округление может вызвать проблемы для вас позже.

  • 0
    Единственный язык, с которым я знаком, - это lisp (для использования в AutoCAD), и я совершенно новичок во всем, что касается Android… поэтому проблема в том, что у меня есть реальный код для разбора и разбиения.
  • 0
    @Bryan - я добавил код, чтобы помочь вам, он может (скорее всего) иметь некоторые ошибки, но он должен приблизить вас.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню