在Docker中运行Java求平均值代码遇错误,请求技术协助
解决Docker中运行Java平均值计算代码的问题
看起来你的代码还没写完呢(rea...应该是reader吧?),先帮你补全代码,再一步步说怎么在Docker里正确运行它,同时排查可能遇到的错误。
第一步:补全并修正你的Java代码
首先,你的代码有几个小问题:拼写错误(avrage应该是average)、未完成的reader调用,还有最后没计算平均值、关闭Scanner。补全后的完整代码如下:
import java.util.Scanner; class Ave { public static void main(String args[]) { int n; double res = 0; Scanner reader = new Scanner(System.in); System.out.println("Enter how many numbers to calculate the average "); n = reader.nextInt(); int a[] = new int[n]; System.out.println("Enter " + n + " numbers"); for(int i = 0; i < n; i++) { a[i] = reader.nextInt(); // 补全reader调用 res += a[i]; // 累加数值 } res = res / n; // 计算平均值 System.out.println("The average is: " + res); reader.close(); // 关闭Scanner } }
第二步:Docker运行Java代码的正确流程
要在Docker里运行Java程序,你需要准备Dockerfile,或者用现成的Java镜像直接运行,这里分两种方法:
方法1:使用Dockerfile构建镜像
- 把上面的代码保存为
Ave.java文件。 - 创建
Dockerfile,内容如下:
# 使用官方OpenJDK镜像作为基础 FROM openjdk:8-jdk-alpine # 将本地的Ave.java复制到容器内 COPY Ave.java /app/ # 设置工作目录 WORKDIR /app # 编译Java代码 RUN javac Ave.java # 运行程序,这里要注意:如果需要交互式输入,运行时要加参数 CMD ["java", "Ave"]
- 构建镜像:
docker build -t java-average .
- 关键!交互式运行容器:因为你的程序需要用户输入,所以运行时必须加
-it参数来分配伪终端并保持标准输入打开:
docker run -it java-average
方法2:直接用Java镜像临时运行(无需Dockerfile)
- 确保
Ave.java在当前目录,先编译(也可以在容器里编译):
javac Ave.java
- 直接运行容器,挂载当前目录到容器内,然后执行程序:
docker run -it -v $(pwd):/app openjdk:8-jdk-alpine /bin/sh -c "cd /app && java Ave"
第三步:排查常见错误
如果你运行时遇到错误,大概率是以下几种情况:
- 交互式参数缺失:没加
-it导致程序等待输入但无法接收,看起来像卡住了,这是最常见的问题。 - 代码编译错误:比如变量未定义、拼写错误(像你之前的
rea...),编译时会报错,仔细看控制台输出的错误信息就能定位。 - 文件路径问题:Dockerfile里的COPY路径不对,或者挂载目录时路径错误,导致容器找不到
.java或.class文件。 - Java版本不兼容:如果你的代码用了高版本Java特性,却用了低版本镜像,会出现编译或运行错误,确保镜像的Java版本和你本地编译的版本一致。
你可以先按照上面的步骤补全代码、调整Docker运行命令,如果还是有具体的错误信息,把错误日志贴出来,我再帮你针对性解决~
内容的提问来源于stack exchange,提问作者Yazeed Alqahhas
相关产品推荐
相关产品推荐

