Используя 2 фрагмента исходного кода Java, я получаю ошибку: Не удается найти символ при попытке компиляции

#java #compiler-errors

Вопрос:

Я исследовал много подобных вопросов, связанных с моей проблемой здесь, но ни один из них не смог помочь.

У меня есть 2 части исходного кода: Proj02.java и Proj02Runner.java. Proj02Runner.java. успешно компилируется, но компиляция Proj02.java выдает эту ошибку:

 Proj02.java:11: error: cannot find symbol
    System.out.println(Proj02Runner.run(randomNumber));
                       ^
  symbol:   variable Proj02Runner
  location: class Proj02
1 error
 

Я понимаю, что ошибка возникает из-за Proj02.java не могу найти Proj02Runner.java. Я просто не могу понять, как это исправить.

Когда программа запускается с использованием обоих источников, вывод должен быть таким:

 128
Hello my name is xxx.

128
129
 

Я ожидаю, что цифры будут меняться каждый раз при запуске программы, но второе число всегда должно быть на единицу больше первого. Пожалуйста, обратите внимание, что мое задание состоит в том, что нам не разрешается изменять какой-либо код в Proj02.java. Мы должны выполнить эту задачу, только изменив Proj02Runner.java.

Вот мой код:

Proj02.java код

 import java.util.Random;
import java.util.Date;
import java.lang.Math;

class Proj02{
  public static void main(String[] args){
    Random generator = new Random(new Date().getTime());
    int rand = generator.nextInt();
    int randomNumber = Math.abs((byte)rand);
    System.out.println(randomNumber);
    System.out.println(Proj02Runner.run(randomNumber));
  }
}
 

Proj02Runner.java код

 class Proj02Runner{
  static int run(int valIn){
    System.out.println(
      "Hello my name is xxx.n");
    byte myVar = (byte) valIn;
    System.out.println(myVar);
    myVar = --myVar;
    return myVar;
  }
}
 

Любая информация была бы весьма признательна.

Комментарии:

1. как вы пытаетесь скомпилировать/запустить эти файлы? Вы вручную запускаете javac для файлов или это делается в среде IDE или в инструменте сборки?

2. Я запускаю их вручную с помощью cmd, используя javac. Спасибо.

3. Покажите нам точные команды, которые вы используете.

4. Вам нужно будет скомпилировать их оба одновременно или добавить Proj02Runner в путь к классам javac при попытке скомпилировать Proj02. Самый простой способ-скомпилировать их оба одновременно-поместить их в один и тот же каталог, а затем скомпилировать *.java

5. Большинство людей переходят к системе сборки (gradle, maven, ivy и т. Д.) Или проекту IDE, Если они собираются делать что-то более сложное, чем один файл

Ответ №1:

Чтобы решить проблему, когда второе число выше первого. Просто измените myVar = --myVar; на myVar = myVar;

Полный код выглядит следующим образом: `

 public class Proj02 {
    public static void main(String[] args){
        Random generator = new Random(new Date().getTime());
        int rand = generator.nextInt();
        int randomNumber = Math.abs((byte)rand);
        System.out.println(randomNumber);
        System.out.println(Proj02Runner.run(randomNumber));
    }
}

class Proj02Runner{
    static int run(int valIn){
        System.out.println(
          "Hello my name is xxx.n");
        byte myVar = (byte) valIn;
        System.out.println(myVar);
        myVar =   myVar;
        return myVar;
    }
}
 

`

Это приведет к следующему примеру вывода:

 67
Hello my name is xxx
67
68
 

Я надеюсь, что это поможет решить вашу проблему 🙂

Комментарии:

1. Я думаю, что вы отвечаете на следующий вопрос ОП 🙂 Вы могли бы включить командную строку компиляции (возможно javac *.java ), чтобы завершить свой ответ

2.Спасибо! Я собрал все вместе и подумал, что это сработало — я не получил никаких ошибок. Но когда я запустил его, я получил эту ошибку: Proj02.java:11: error: cannot find symbol System.out.println(Proj02Runner.run(randomNumber)); ^ symbol: variable Proj02Runner location: class Proj021 error error: compilation failed

Ответ №2:

Ответ Эвана описывает, как изменить код; Вот что вы можете сделать, чтобы скомпилировать и запустить свой код из командной строки.

Во-первых, поместите два файла вместе в один каталог:

C:demo>реж.
 Том в накопителе C
- Серийный номер тома ОС-C8EE-A280

 Справочник по C:demo

06/10/2021 10:55 УТРА .
06/10/2021 10:55 УТРА ..
06/09/2021 04:02 367 Proj02.java
06/09/2021 04:02 215 Proj02Runner.java
 2 Файла (файлов) 582 байта

Тогда беги javac *.java

C:demo>javac *.java

C:demo>реж.
 Том в накопителе C
- Серийный номер тома ОС-C8EE-A280

 Справочник по C:demo

06/10/2021 10:55 УТРА .
06/10/2021 10:55 УТРА ..
06/10/2021 10:55 630 Proj02.class
06/09/2021 04:02 367 Proj02.java
06/10/2021 10:55 468 Proj02Runner.class
06/09/2021 04:02 215 Proj02Runner.java
 4 Файла (ов) 1680 байт

Теперь, когда он скомпилирован, вы можете запустить код. Программы Java требуют, чтобы a public static void main(String[] args) был доступен для выполнения, и этот метод Proj02 включен , так что это тот, который вы вызываете:

C:demo>java -cp . Проект 02
120
Здравствуйте, меня зовут ххх.

120
119

C:demo>

Это должно помочь тебе преодолеть трудности при выполнении этого задания. Я настоятельно рекомендую освоиться с одной из систем сборки (gradle, maven, ivy, ant и т. Д.) Или, по крайней мере, с проектом IDE, Потому что, когда вы начнете выполнять более сложную работу, вам захочется включить дополнительные библиотеки, и метод командной строки быстро станет неуправляемым.