Во время вызова метода compute(ee, temp1, s1, k)
из метода smaller()
значение аргумента, которое проходит мимо, не такое же, как тот, который я получаю, может ли кто-нибудь помочь мне с этой проблемой?Pass by Reference issue-Java
* Это мое заявление о проблеме. Получите наименьшее число после удаления k цифр из номера ввода. Например, если входной номер равен 24635, наименьшее число равно 23 после удаления 3 цифр.
Я ожидаю, что конечный результат будет 23, но получится бесконечный цикл.
public class Delete3 {
public static void main(String[] args) {
int k = 3;
int num = 24635;
StringBuffer num1 =new StringBuffer(Integer.toString(num));
int temp = 0;
StringBuffer s = new StringBuffer(num1);
temp = Integer.parseInt(s.deleteCharAt(0).toString());
temp = compute(num1, temp, s, k);
System.out.println(temp);
}
static int compute(StringBuffer num2, int temp, StringBuffer s, int k) {
while (Integer.toString(temp).length() >= k) {
for (int i = 0; i < num2.length(); i++) {
StringBuffer s1 = new StringBuffer(num2);
String a = s1.deleteCharAt(i).toString();
int temp1 = Integer.parseInt(a);
if (temp > temp1) {
temp = Integer.parseInt(a);
}
}
StringBuffer ee = new StringBuffer(Integer.toString(temp));
if (ee.length() >= k) {
smaller(temp, k);
}
}
return temp;
}
static void smaller(int temp, int k) {
StringBuffer ee = new StringBuffer(Integer.toString(temp));
StringBuffer s1 = new StringBuffer(ee);
StringBuffer s2 = new StringBuffer(ee);
Integer temp1 = Integer.parseInt(s2.deleteCharAt(0).toString());
compute(ee, temp1, s1, k);
}
}
Java является передача по значению, так как же вы думаете, у вас есть пропуск по эталонным вопросу в Java? – Stultuske
Java wont поддерживает передачу по ссылке –
Можете добавить комментарии к этому коду? Сейчас очень сложно понять, что вы пытаетесь выполнить и как это происходит. В общем, хотя Java никогда не может передавать ссылки. Это всегда [pass by value] (http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value?rq=1). – mhlz