【发布时间】:2020-07-28 06:19:43
【问题描述】:
我的目标是打印出用户输入值(及其对应的索引),如果它在随机生成的 50 个整数数组中出现 1 次或多次。但是,如果我在数组中搜索一个值,并且它恰好出现不止一次,则只打印元素的一个位置,然后执行 if-else 语句。如果我在第三个 for 循环结束时删除 break,整个事情就会崩溃。我附上了一张图片,但这是给我一个问题的部分。如果代码不干净,我很新。
public static void main(String[] args) {
System.out.println("IDS201 HW3:\n");
System.out.println("1. Generate 50 random integer unsorted list.\n");
Scanner stdin = new Scanner(System.in);
int[] randomNumbers = new int[50];
for(int index = 0; index < randomNumbers.length; index++) {
randomNumbers[index] = (int) (Math.random()*100);
}//end for
int count = 0;
for(int i = 0; i < randomNumbers.length; i++) {
System.out.print(randomNumbers[i] + ",");
count++;
if(count == 10) {
System.out.println();
count = 0;
}
}//end for
System.out.println("\nSearch value?");
int x = stdin.nextInt();
int i;
for(i = 0; i < randomNumbers.length; i++) {
if(randomNumbers[i] == x)
break;}
if (i != randomNumbers.length) {
System.out.println("\nFound " + x + " in array [" + i + "]");}
else {
System.out.println(x + " is not in the list");}
{int temp;
int size = randomNumbers.length;
for(i = 0; i<size; i++ ){
for(int j = i+1; j<size; j++){
if(randomNumbers[i]>randomNumbers[j]){
temp = randomNumbers[i];
randomNumbers[i] = randomNumbers[j];
randomNumbers[j] = temp;
}
}
}
System.out.println("\nSmallest element of the array is: " + randomNumbers[0]);}
System.out.println("\n3. Sort the list:");
int size = randomNumbers.length;
for(i=0; i<size; i++)
{
for(int j=i+1; j<size; j++)
{
if(randomNumbers[i] > randomNumbers[j])
{
int temp = randomNumbers[i];
randomNumbers[i] = randomNumbers[j];
randomNumbers[j] = temp;
}
}
}
System.out.print("Now the Array after Sorting is :\n\n");
int count1 = 0;
for(i=0; i<size; i++)
{
System.out.print(randomNumbers[i]+ ",");
count++;
if(count == 10) {
System.out.println();
count = 0;
}
}
}
}
【问题讨论】:
-
如果你想找到所提供值的所有索引,那么不要跳出循环——将所有索引存储在一个新数组中(更好的是,
List实现)。不相关:选择一种花括号样式并只使用那个,Java != JavaScript,并考虑将每个功能块分解为一个单独的方法。我发现代码难以阅读和推理,而且看起来应该很简洁。 -
提取函数和编写单元测试的最佳时机
标签: java arrays for-loop if-statement