2016-01-21 3 views
1

Мне нужно автоматизировать снимок кода, используя циклы. Мне нужно, чтобы получить значение макс, даже если availpoints достигает бесконечное числоАвтоматизация логики с использованием циклов?

Как я могу достичь его в течение нескольких строк кода

if (availPoints < 500) { 
    pointsMax = 500; 
    MoneyMax = 25; 
} 
else if (availPoints < 1000) { 
    pointsMax = 1000; 
    MoneyMax = 50; 
} 
else if (availPoints < 1500) { 
    pointsMax = 1500; 
    MoneyMax = 75; 
} 

UPDATE:

Предположим availPoint являются точки счет пользователя от 1 до 1000000 (бесконечный тоже). Каждые 500 очков - это слот. Если точки входят в следующий слот. Max значения pointMax должен быть увеличен на 500 & MoneyMax на 25.

+2

Из предоставленного фрагмента кода неясно, за что вы хотите контактировать. Не могли бы вы опубликовать немного больше кода, чтобы стало ясно? – hotzst

+0

В вашем коде есть три ветви кода, не видите прецедент для цикла 'for'. Попробуйте использовать тернарный оператор??: ', Если хотите уменьшить линии. –

ответ

0

Он не требует петли.

for (int availPoints = 400; availPoints < 2000; availPoints += 200) { 
     int rank = availPoints/500; 
     int pointsMax = (rank + 1) * 500; 
     int MoneyMax = (rank + 1) * 25; 
     System.out.printf("availPoints %d -> pointMax=%d MoneyMax=%d%n", 
      availPoints, pointsMax, MoneyMax); 
    } 

результат:

availPoints 400 -> pointMax=500 MoneyMax=25 
availPoints 600 -> pointMax=1000 MoneyMax=50 
availPoints 800 -> pointMax=1000 MoneyMax=50 
availPoints 1000 -> pointMax=1500 MoneyMax=75 
availPoints 1200 -> pointMax=1500 MoneyMax=75 
availPoints 1400 -> pointMax=1500 MoneyMax=75 
availPoints 1600 -> pointMax=2000 MoneyMax=100 
availPoints 1800 -> pointMax=2000 MoneyMax=100 
+0

Я ожидал такого результата. Но я не могу инициализировать availPoints в цикле for. Я получаю его из базы данных – user3467240

+0

Цикл в моем коде используется только для подтверждения результатов. Вы можете просто вычислить 'pointsMax = (availPoints/500 + 1) * 500' и' MoneyMax = (availPoints/500 + 1) * 25'. – saka1029

0

Мне нужно получить значения макс, даже если availpoints достигает бесконечного числа

Ну это на самом деле не хорошо в программировании! Вы должны где-то остановиться. Хотя, если вам нужно зацикливаться до бесконечности (в моем терминах, очень большое число), вы всегда можете использовать while(true){} LOOP с соответствующей операцией break.

Если вы могли бы уточнить, что для каких сценариев вы хотите поддержать, то это может быть более ясным для нас. В противном случае что-то вроде должно работать для вас - (псевдо-код - Не пытайтесь, не понимая его правильно)

long maxPoints = 0; 
double MoneyMax = 0; 
while(true) { 
    if((availPoints == REALLY BIG MAGIC NUMBER) || (SOME OTHER CONDITION)){ 
     maxPoints += 500; 
     MoneyMax += 25; 
    } 
} 

Хотя, как я уже говорил, вы должны выбрать какое-либо условие, на основании которого вы перестанете. Если эта логика никогда не изменится с помощью приложения, вы можете хранить значения в БД и играть с ними, когда это необходимо.

Надеюсь, это поможет.!

0

Если вы хотите использовать невероятно большое количество, я предлагаю импортировать java.math.BigInteger

Вот код, который будет использовать цикл, чтобы найти pointsMax и MoneyMax.

for (pointsMax = new BigInteger("500"), MoneyMax = new BigInteger("25"); 
pointsMax.compareTo(availPoints) != 1;) { 
    pointsMax = pointsMax.add(new BigInteger("500")); 
    MoneyMax = MoneyMax.add(new BigInteger("25")); 
} 

EDIT: Сделано все в одну петлю. Кроме того, убедитесь, что availPoints также является BigInteger.

EDIT 2: Сделано в петлю для петли.