Найти минимальный набор данных, вводимых с клавиатуры

#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.

4. ideone.com/tbkvIB

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 в качестве минимального значения, что определенно не то, что вы хотите. Я изменю это в своем коде.