2013-08-20 1 views
1

Мне недавно был задан вопрос для uni, который относится к заявлению кредитной карты, в котором говорится, что у меня есть строка чисел, затем я конвертирую эти числа в отдельные целые числа, тогда i увеличивайте их на мощность 10 в зависимости от их положения в строке с использованием метода horners . Затем мне нужно добавить значения, которые я получаю из цикла, чтобы сделать 1 целое число. Я знаю, что это необычный способ преобразования строки в int, но мое назначение указывает, что мне нужно использовать метод horners для преобразования строки, а не использовать встроенные классы/методы Java.Как я могу добавить значения из цикла в java

Мой вопрос: как я могу добавьте отдельные взвешенные числа и объедините их в один номер.

Если это помогает пример будет,

Учитывая карта номер 1234, номер взвешивается в соответствии с его положением и длины так:

1 - 1000 
2 - 200 
3 - 30 
4 - 4 

Затем они добавляют, чтобы создать целый ряд

1, 2, 3,4 ---> 1234

Вот мой код до сих пор

public static long toInt(String digitString) { 
    long answer = 0; 
    long val = 0; 
    String s = ""; 
    for (int j = 0; j < digitString.length(); j++) { 
     val = digitString.charAt(j) - '0'; 
     val = (long) (val * Math.pow(10, (digitString.length() - 1) - j)); 
     System.out.println(val); 

    } 
    return answer; 
} 
+0

Что не работает, как ожидалось? Что произойдет, если вы его подадите 1234? – John3136

ответ

1

Скорее всего, я не буду следовать за тобой, потому что это звучит слишком просто. Но возвращать длинный (или целое число) все, что вам нужно сделать, это суммировать эти цифры:

public static long toLong(String digitString) { 
    long answer = 0; 
    long val = 0; 
    for (int j = 0; j < digitString.length(); j++) { 
     val = digitString.charAt(j) - '0'; 
     val = (long) (val * Math.pow(10, (digitString.length() - 1) - j)); 
     answer += val; // here! :) 
     //System.out.println(val); 
    } 
    return answer; 
} 

Пожалуйста, обратите внимание, что это не будет работать с отрицательными числами, поэтому здесь более сложный вариант:

public static long toLong(String digitString) { 
    long answer = 0; 
    long val = 0; 
    boolean negative = false; 
    int j = 0; 

    if (digitString.charAt(0) == '-') { 
     negative = true; 
     j = 1; 
    } else if (digitString.charAt(0) == '+') 
     j = 1; 

    for (; j < digitString.length(); j++) { 
     if (!Character.isDigit(digitString.charAt(j))) 
      throw new NumberFormatException(digitString); 

     val = digitString.charAt(j) - '0'; 
     val = (long) (val * Math.pow(10, (digitString.length() - 1) - j)); 
     answer += val; 
    } 

    return negative ? -answer : answer; 
} 

Этот код будет работать с отрицательными номерами и со странными цифрами, которые начинаются с знака +. Если есть какой-либо другой символ, он выдает исключение.

0

Я думаю, что ваш код не является объектно-ориентированным и очень трудно читать и понимать.
Базовый, проблема в сопоставлении и очень проста.
Если вы пишете код на Java, лучше использовать его в OO-способе, хотя я не очень люблю java. заказ мой код

@Test 
public void testCardScoreSystem() { 
    Map<String, String> scoreMapping = new HashMap<String, String>(); 
    scoreMapping.put("1", "1000"); 
    scoreMapping.put("2", "200"); 
    scoreMapping.put("3", "30"); 
    scoreMapping.put("4", "4"); 

    String[] input = {"1", "2", "3", "4"}; 

    long score = 0; 
    for (String str : input) { 
     String mappedValue = scoreMapping.get(str); 

     if (mappedValue == null) { 
      throw new RuntimeException("Hey dude, there is no such score mapping system! " + str); 
     } 

     score += Long.valueOf(mappedValue); 
    } 

    System.out.println(score); 
} 
Смежные вопросы