2014-09-23 3 views
-1

Эй, я работаю над методом, который выбирает наименьшую цифру из единиц, десятки, сотни и тысячи точек на двух переданных целых числах, а затем возвращает int из наименьших значений для каждого место. Например, если int a = 4321 и int b = 1957, тогда метод вернет 1321. Это мой код до сих пор, я думаю, что у меня есть все, но я не могу узнать, как правильно вернуть новое значение как целое число.Возвращение нескольких целых чисел как одно значение

public static int biggestLoser(int a, int b){ 
    int first; 
    int second; 
    int third; 
    int fourth; 
    if(a>9999 || a<1000 || b>9999 || b<1000){ 
     if(a>b) 
      return b; 
     else 
      return a; 
     } 
    else{ 
     if(a%10 < b%10) 
      first=a%10; 
     else 
      first=b%10; 
     if(a/1000<b/1000) 
      fourth=a/1000; 
     else 
      fourth=b/1000; 
     if(a/100%10<b/100%10) 
      second=a/100%10; 
     else 
      second=b/100%10; 
     if(a/10%10<b/10%10) 
      third=a/10%10; 
     else 
      third=b/10%10; 
     //int total=fourth,third,second,first;????? 
     //return total; 
    } 
} 
+2

Рассмотрим умножение на 10 и добавил, точно так же, как вы делали бы на бумаге. Не делайте это более сложным, чем то, что это - базовая арифметика 3-го класса. –

ответ

2

Прежде всего кода имеет незначительную ошибку. Вы должны поменять коды на second и third.

if(a/100%10<b/100%10) 
    third=a/100%10; 
else 
    third=b/100%10; 
if(a/10%10<b/10%10) 
    second=a/10%10; 
else 
    second=b/10%10; 

После фиксации его просто сказать:

int total = first + 10 * second + 100 * third + 1000 * fourth; 
return total; 

И это все.

+0

S% * @ Я не заметил, что спасибо человеку! – nebularis

0

Вы можете сформировать строку первой и сделать Integer.parseInt() или сделать некоторую математику как int total = (first*1)+(second*10)+(third*100)+(fourth*1000);.

+0

Спасибо, что сделал трюк! – nebularis

0

Было бы лучше реализовать что-то вроде этого:

int returnValue = 0; 
for(int digit = 0; digit < 4; digit++) { 
    int aDigit = (a/Math.pow(10, digit)) % 10; // Gets the digit 
    int bDigit = (b/Math.pow(10, digit)) % 10; 
    int max = (a > b)? a : b; // Calculates de maximum digit 
    returnValue += max * Math.pow(10, digit); //Adds the new digit to the return value 
} 
return returnValue; 
+1

Math.pow очень неэффективен, тогда как ему просто нужно умножить целые числа. –

+0

Спасибо, но это слишком сложно! – nebularis

0
int i=1000,z=0; 
    do{ 
    int x = a/i; 
    a=a%i; 
    int y = b/i; 
    b=b%i; 
    if(x<y) 
    z+=x*i; 
    else z+=y*i; 
    i=i/10; 
}while(i>0); 
return z; 
//this is just logic, works for 4 digit numbers 
0

просто верните значения как массив int. Я реструктурировать свой метод, чтобы сделать это

public static int[] biggestLoser(int a, int b){ 
int first; 
int second; 
int third; 
int fourth; 
int [] values; 
if(a>9999 || a<1000 || b>9999 || b<1000){ 
    if(a>b) 
     return b; 
    else 
     return a; 
    } 
values = new int[4]; 
else{ 
    if(a%10 < b%10) 
     first=a%10; 
    else 
     first=b%10; 
    if(a/1000<b/1000) 
     fourth=a/1000; 
    else 
     fourth=b/1000; 
    if(a/100%10<b/100%10) 
     second=a/100%10; 
    else 
     second=b/100%10; 
    if(a/10%10<b/10%10) 
     third=a/10%10; 
    else 
     third=b/10%10; 
    //int total=fourth,third,second,first;????? 
    values[0] = first; 
    values[1] = second; 
    values[2] = third; 
    values[3] = fourth; 
    return value; 
} 

}

в основной метод теперь вы можете получить каждый элемент массива с помощью для цикла

for(int x : values){ 
    System.out.print(x); 
}