#java #methods #pseudocode
#java #методы #псевдокод
Вопрос:
В моем учебнике есть алгоритм, написанный в псевдокоде, который затем должен быть «реализован в методе Java». Это выглядит следующим образом:
считывать min;
пока не заполнено,
считываем x
, если x < min, то
min <- x
заканчивается, если
заканчивается при
выводе min;
Затем мне дается этот код:
import java.util.Scanner;
int min() {
Scanner input = new Scanner(System.in);
System.out.println("x=? (999 to end)");
int x = input.nextInt();
int min = x;
while (x!=999) {
System.out.println("x=? (999 to end)");
x = input.nextInt();
if (x < min) {
min = x;
}
}
return min;
}
Я поместил все ниже import.Сканер внутри метода main и внутри класса, подобного этому:
public class MyAlgorithm {
public static void main(String[] args) {
// code here
}
}
Но затем я получаю это сообщение об ошибке в терминале:
MyAlgorithm.java:7: error: ';' expected
int min() {
^
1 error
Я что-то упускаю? Если я поставлю там точку с запятой, все это просто не будет работать.
Комментарии:
1. Это означает, что вы должны изучать Java!
2. Покажите весь свой код. Похоже (но неясно, что), что вы вставили импорт и
min
метод внутриmain
метода. Это объяснило бы проблему.3. Вы хотите сказать, что вы помещаете первый сегмент кода внутрь метода main? Вы пытаетесь определить функцию внутри main? Я не уверен, как выглядит ваш фактический код. Если вы хотите определить min, вам нужно сделать это вне main, а затем вызвать его из main.
5. Честно говоря, я понятия не имею, что я делаю. Правильно ли я понимаю, что часть min() должна входить в класс? И цикл тоже? Но когда я это сделал, я также получил кучу ошибок.
Ответ №1:
Похоже, что вы поместили свой метод min внутри main, это определяет методы из других методов, которые не будут работать должным образом и не смогут скомпилироваться. Метод main — это команды, которые вы хотите запускать сразу после запуска вашей программы, любые другие функции в классе должны быть объявлены вне его, и если вы хотите, чтобы они выполнялись в main, вы выполняете вызов метода.
это должно выглядеть примерно так:
import java.util.Scanner;
public class MyAlgorithm {
int min() {
//(min code)
}
public static void main(String[] args) {
// code here
//corrected according to Uli's comment
MyAlgorithm m = new MyAlgorithm();
int result = m.min();
}
}
Я предлагаю прочитать о том, как структурированы программы Java. Вот статья о методах.
Комментарии:
1. Это не сработает, потому что основной метод является статическим. Сначала вам нужно создать объект MyAlgorithm.
2. @UliSotschok Вы обновили свой ответ прямо перед тем, как я опубликовал, теперь этот ответ в основном повторяет то, что у вас есть, я мог бы удалить его.
3. вы правы насчет помещения функции min за пределы main. Но проблема в вашем коде заключается в том, как вы вызываете метод min. Это вызовет ошибку при вставке его в вашу IDE
4. Я потратил слишком много времени на работу с C, так что эта ошибка проскользнула мимо меня, ха-ха.
Ответ №2:
Не помещайте свой метод min()
внутрь main()
метода. В Java вы не можете определить метод внутри метода. В Java вам нужен объект для вызова его методов (за исключением того, что вы делаете методы статическими). Итак, ваш окончательный код выглядит примерно так.
import java.util.Scanner;
public class MyAlgorithm {
public static void main(String[] args) {
MyAlgorithm m = new MyAlgorithm ();
m.min();
}
int min(){
//Your min code goes here
return min_value;
// min_value is the same as your min variable. It has another name to
// prevent name collisions
}
}
Если вам разрешено использовать статические методы (чего я не думаю), вы можете использовать следующую альтернативу:
static int min(){
//Your min code goes here
return min_value;
// min_value is the same as your min variable. It has another name to
// prevent name collisions
}
public static void main(String[] args) {
int result = MyAlgorithm.min();
}
Комментарии:
1. Куда я должен это поместить?
2. @cupoftae Я добавил пример кода, на который вы можете ссылаться
3. Хорошо, я понял. Я пробовал обе эти структуры, и они сработали. Последний (возможно, глупый) вопрос: имеет ли значение, возвращаю ли я 1 или min?
4. @cupoftae да, это имеет значение. Вы должны вернуться
min
. Если вы вернете 1, который был всего лишь заполнителем, вы всегда получите 1 в качестве минимального значения, что определенно не то, что вы хотите. Я изменю это в своем коде.