java - 在 for 语句中更改数组
问题描述
我认为它应该在这个时候发布完整的代码。
当我试图从 Scanner 获取值到名为“score”的数组中时,
第二个 for 语句显示了意想不到的结果。
import java.util.Scanner;
public class B1546 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int N = input.nextInt();
int[] score = new int[N];
Max scoreMax = new Max();
double sum = 0;
for (int i=0; i<N; i++) {
score[i] = input.nextInt();
}
for (int i=0; i<N; i++) {
System.out.println(score[i]); // this show the problems
sum = sum + ((double) score[i] / scoreMax.max(score) * 100);
}
System.out.println(sum / N);
}
}
class Max {
int max (int[] score) {
int[] tmpArray;
tmpArray = score;
for( int i=0; i<score.length-1; i++) {
for( int j=i+1; j<score.length; j++) {
if (tmpArray[i]<tmpArray[j]) {
int tmp = tmpArray[i];
tmpArray[i] = tmpArray[j];
tmpArray[j] = tmp;
}
}
}
return tmpArray[0];
}
}
例如,当我输入 3 10 20 30 然后它来了 10 20 10 ...
不是 10 20 30 ...
我不知道是什么问题。
解决方案
您的 Max.max 方法更改了数组 - 以 . 开头的 3 行int tmp =
。
您的问题的根源可能是不了解引用类型。 tmpArray = score
不会制作数组的单独副本score
——您只有对同一个数组的两个引用。这个概念是 Java 编程的基础。
推荐阅读
- python-3.x - 提取文本 OpenCV 轮廓
- php - 比较两个日期,第二个日期应该大于 php 中的第一个日期
- parsing - Pug 上下文是免费的吗?
- ios - 编辑器中缺少 Xcode 文件
- neo4j - 获取neo4j查询的个别结果
- pdf - 如何查找存储在 HDFS 中的两个 PDF 之间的相似度分数
- javascript - 如何以正确的方式创建由我的 Rails 应用程序变量初始化的全局 js 变量?
- java - 如何使用 Jackson 绑定 Map
bean的参数? - java - how to get Json objects from json array and use them with model class
- javascript - 查看具有完美同步热图的树状图