Я думаю, что я, возможно, перепутал большое время. Идея оригинала: используйте массивы для увеличения значений, которые были введены. Как это работает: (внутри public static void main(String[] args)
)
Я думаю, что я мог бы сделать лучше, если бы использовал 2d-массив, но больше не могу сказать.
Minimum no. | Increase by this if belong to this tier
0 | 2
10 | 5
20 | 10
Если я вхожу в 4, я должен получить 6.
Если я вхожу в 13, я должен получить 18. И так далее.
import java.util.Scanner;
public class ValueIncrease {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int tierNo;
double value;
double[] Req, Increase;
System.out.printf("\nHow many tiers are there?");
tierNo = s.nextInt();
Req = Increase = new double[tierNo];
System.out.printf("\nEnter the minimum amounts to reach the next tiers.");
System.out.printf("\n(Remember to seperate by commas.)");
s.nextLine();
String requirement = s.nextLine();
String req[] = requirement.split(",");
System.out.printf("\nEnter the increase for each tier.");
System.out.printf("\n(Seperate by commas.)");
String ValInc = s.nextLine();
String ValueIncrease[] = ValInc.split(",");
for (int i = 0; i < (tierNo - 1); i++) {
try {
Req[i] = Double.parseDouble(req[i]);
Increase[i] = Double.parseDouble(ValueIncrease[i]);
} catch (NumberFormatException nfe) {
}
}
System.out.printf("\nEnter value: ");
value = s.nextDouble();
//calculate value
int l = Req.length;
for (int a = 0; a < (l - 1); a++) {
if (value >= Req[l - a]) {
value = value + Increase[l - a];
} else {
}
}
}
}
Здесь фиксированный код с комментариями, описывающими все неформатные изменения, которые я сделал:
import java.util.Scanner;
public class ValueIncrease {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int tierNo;
double value;
double[] minList; // changed var naming convention
double[] incList;
System.out.printf("\nHow many tiers are there?");
tierNo = s.nextInt();
// fixed allocation
minList = new double[tierNo];
incList = new double[tierNo];
System.out.printf("\nEnter the minimum amounts to reach the next tiers.");
System.out.printf("\n(Remember to seperate by commas.)");
s.nextLine();
String minStr = s.nextLine();
String minStrList[] = minStr.split(",");
System.out.printf("\nEnter the increase for each tier.");
System.out.printf("\n(Seperate by commas.)");
String incStr = s.nextLine();
String incStrList[] = incStr.split(",");
for (int i = 0; i < tierNo; i++) { // fixed loop max
try {
minList[i] = Double.parseDouble(minStrList[i]);
incList[i] = Double.parseDouble(incStrList[i]);
} catch (NumberFormatException nfe) {}
} // end for
while (true) { // added while loop for more efficient testing
System.out.printf("\nEnter value (negative to exit): ");
value = s.nextDouble();
if (value < 0.0) break;
// calculate value
for (int i = tierNo-1; i >= 0; i--) { // changed loop direction
if (value >= minList[i]) {
value = value + incList[i];
break; // added break
} // end if
} // end for
System.out.printf("Result: %f", value ); // added print statement
} // end while
} // end main()
} // end class ValueIncrease
Резюме:
a = b =...;
присваивает a
и b
одному значению (результат оценки выражения ...
). Таким образом, вы не можете назначить две ссылочные переменные одному и тому же new
выражению, если вы хотите, чтобы они ссылались на отдельные распределения. Поэтому мне пришлось отделить выделение minList
и incList
двух отдельных операторов, каждый из которых имеет свой собственный new
вызов.tierNo-1
; он должен быть tierNo
. Оператор сравнения в условном tierNo-1
<
, таким образом, i
буду перебирать от 0
до уровня tierNo-1
естественно, без необходимости вычитать его из циклы max.Демо-версия:
bash> ls;
ValueIncrease.java
bash> javac ValueIncrease.java;
bash> ls
ValueIncrease.class* ValueIncrease.java;
bash> CLASSPATH=. java ValueIncrease;
How many tiers are there?3
Enter the minimum amounts to reach the next tiers.
(Remember to seperate by commas.)0,10,20
Enter the increase for each tier.
(Seperate by commas.)2,5,10
Enter value (negative to exit): 0
Result: 2.000000
Enter value (negative to exit): 1
Result: 3.000000
Enter value (negative to exit): 2
Result: 4.000000
Enter value (negative to exit): 8
Result: 10.000000
Enter value (negative to exit): 9
Result: 11.000000
Enter value (negative to exit): 10
Result: 15.000000
Enter value (negative to exit): 11
Result: 16.000000
Enter value (negative to exit): 12
Result: 17.000000
Enter value (negative to exit): 19
Result: 24.000000
Enter value (negative to exit): 20
Result: 30.000000
Enter value (negative to exit): 21
Result: 31.000000
Enter value (negative to exit): 22
Result: 32.000000
Enter value (negative to exit): 100
Result: 110.000000
Enter value (negative to exit): 3248957
Result: 3248967.000000
Enter value (negative to exit): -3