0
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi đang cố gắng tạo một chương trình yêu cầu người dùng nhập một số, có bao nhiêu số ngẫu nhiên trong khoảng 1-100 sẽ được tạo trong một mảng. Sau đó, tôi muốn số lớn nhất được hoán đổi với số cuối cùng và số nhỏ nhất được hoán đổi với số đầu tiên. Đây là mã của tôi cho đến nay:
import java.util.Scanner; import java.util.Random; public class smallbig { public static void main(String[] args) { Scanner scan = new Scanner(System.in); Random randomGenerator = new Random(); int num = scan.nextInt(); int[] myArray = new int[num]; for (int i = 0; i < myArray.length; ++i) { int randomInt = randomGenerator.nextInt(100); myArray[i] = randomInt; } int smallest = myArray[0]; int largest = myArray[0]; for (int i = 1; i < myArray.length; i++) { if (myArray[i] > largest) { largest = myArray[i]; } if (myArray[i] < smallest) { smallest = myArray[i]; } } for (int j = 1; j < myArray.length; j++) { int first = myArray[0]; myArray[0] = smallest; smallest = first; int temp = largest; int last = myArray.length; myArray[last - 1] = largest; temp = myArray[last - 1]; System.out.print(myArray[j] + " "); } } }Tôi dường như không thể có được các con số để hoán đổi đúng cách. Tôi đã tạo một vòng lặp xác định các số nhỏ nhất và lớn nhất từ các số được tạo và chúng được lưu trữ. Sau đó, tôi tạo một vòng lặp thực hiện các giao dịch hoán đổi cần thiết nhưng dường như tôi không thể làm cho nó hoạt động đúng. Nó hoạt động tốt khi hoán đổi số lớn nhất với số cuối cùng nhưng hầu hết thời gian (không phải lúc nào), số cuối cùng xuất hiện cũng có mặt ở một nơi khác trong mảng. Đây là những gì tôi muốn nói:
input: 10 output: 62 48 34 0 91 14 64 60 91Tôi biết có một phương pháp Swapper mà tôi có thể sử dụng nhưng tôi muốn làm điều đó bằng cách trao đổi thủ công các số. Bất kỳ sự giúp đỡ được đánh giá cao, cảm ơn.
Suraj Bajaj
6.5805 Huy hiệu vàng37 Huy hiệu bạc49 Huy hiệu đồng5 gold badges37 silver badges49 bronze badges
Đã hỏi ngày 23 tháng 11 năm 2016 lúc 20:03Nov 23, 2016 at 20:03
2
Bạn có một lỗi đơn giản, vòng lặp của bạn sẽ bắt đầu từ '0' khi bạn thực hiện hoán đổi
for (int j = 0; j < myArray.length; j++) { int first = myArray[0]; myArray[0] = smallest; smallest = first; int temp = largest; int last = myArray.length; myArray[last - 1] = largest; temp = myArray[last - 1]; System.out.print(myArray[j] + " ");Đã trả lời ngày 23 tháng 11 năm 2016 lúc 20:19Nov 23, 2016 at 20:19
3
Thay vì một vòng lặp làm
//find and stores poition of small int smallPos = myArray.indexOf(small); //stores tge values at 0 int tempSmall = myArray[0]; //swaps the values myArray[0] = small; myArray[smallPos] = smallTemp;Chỉ cần lặp lại điều này với giá trị lớn nhất và in nó bằng cách sử dụng một vòng lặp. Hãy cho tôi biết nếu nó hoạt động.
Đã trả lời ngày 23 tháng 11 năm 2016 lúc 20:13Nov 23, 2016 at 20:13
OmaromarOmar
951 Huy hiệu vàng3 Huy hiệu bạc11 Huy hiệu đồng1 gold badge3 silver badges11 bronze badges
Tôi chỉ đã thử điều này. Hi vọng điêu nay co ich.
public class App { static int[] a = new int[100]; public static void main(String[] args) { int i; for(i = 0; i<a.length;i++) a[i] = (int)(java.lang.Math.random() * 100); int smallest = 0, largest = 0; for(i =1; i<a.length; i++){ if(a[i] < a[smallest]) smallest = i; if(a[i] > a[largest]) largest = i; } swap(0,smallest); swap(a.length-1,largest); for(i =0; i<a.length;i++) System.out.print(a[i] + " "); } public static void swap(int i, int j){ int temp = a[i]; a[i] = a[j]; a[j] = temp; } }Đã trả lời ngày 23 tháng 11 năm 2016 lúc 20:29Nov 23, 2016 at 20:29
Vòng lặp cuối cùng của bạn không làm bất cứ điều gì vòng lặp. Nó chỉ làm điều tương tự hơn và hơn. Và những gì nó làm không đúng. Nó đang hoán đổi nhỏ nhất vào phần tử đầu tiên nhưng nó không di chuyển phần tử đầu tiên ở bất cứ đâu: nó đã biến mất.
Bạn cần theo dõi nơi các yếu tố lớn nhất và nhỏ nhất. Logic hoán đổi của bạn không xem xét điều đó.
Đã trả lời ngày 23 tháng 11 năm 2016 lúc 20:13Nov 23, 2016 at 20:13
Omaromarnicomp
951 Huy hiệu vàng3 Huy hiệu bạc11 Huy hiệu đồng4 gold badges22 silver badges52 bronze badges
Tôi chỉ đã thử điều này. Hi vọng điêu nay co ich.
import java.util.Scanner; import java.util.Random; public class smallbig { public static void main(String[] args) { Scanner scan = new Scanner(System.in); Random randomGenerator = new Random(); int num = scan.nextInt(); int[] myArray = new int[num]; for (int i = 0; i < myArray.length; ++i) { int randomInt = randomGenerator.nextInt(100); myArray[i] = randomInt; } int smallest = myArray[0]; int largest = myArray[0]; int pos1,pos2; for (int i = 1; i < myArray.length; i++) { if (myArray[i] > largest) { largest = myArray[i]; pos1=i; } if (myArray[i] < smallest) { smallest = myArray[i]; pos2=i; } } myArray[pos1]=myArray[myArray.length-1]; myArray[myArray.length-1]=largest; myArray[pos2]=myArray[0]; myArray[0]=smallest; for (int j = 1; j < myArray.length; j++) { System.out.print(myArray[j] + " "); } } }Đã trả lời ngày 23 tháng 11 năm 2016 lúc 20:29Nov 23, 2016 at 20:15
Vòng lặp cuối cùng của bạn không làm bất cứ điều gì vòng lặp. Nó chỉ làm điều tương tự hơn và hơn. Và những gì nó làm không đúng. Nó đang hoán đổi nhỏ nhất vào phần tử đầu tiên nhưng nó không di chuyển phần tử đầu tiên ở bất cứ đâu: nó đã biến mất.Tanuj Yadav
Bạn cần theo dõi nơi các yếu tố lớn nhất và nhỏ nhất. Logic hoán đổi của bạn không xem xét điều đó.13 silver badges21 bronze badges
Nicompnicomp
import java.util.Scanner; import java.util.Random; public class smallbig { private static int[] myArray; public static void main(String[] args) { Scanner scan = new Scanner(System.in); Random randomGenerator = new Random(); //int num = scan.nextInt(); //skip this for testing ^^-d int num = 10; myArray = new int[num]; for (int i = myArray.length-1; i > 0; i--) { //int randomInt = randomGenerator.nextInt(100); int randomInt = i; //use test condition that can be reproduced! myArray[i] = myArray.length-i; } int smallest = 0; int largest = 0; int smallestIndex = 0; int largestIndex = 0; for (int i = 0; i < myArray.length; i++) { if (myArray[i] > largest) { largest = myArray[i]; largestIndex = i; } if (myArray[i] < smallest) { smallest = myArray[i]; smallestIndex = i; } } switchIndexOfmyArray(0, smallestIndex); switchIndexOfmyArray(myArray.length-1, largestIndex); for (int j = 0; j < myArray.length; j++) { System.out.print(myArray[j] + " "); } } public static void switchIndexOfmyArray(int index, int switchWithIndex){ int temp = myArray[index]; myArray[index] = myArray[switchWithIndex]; myArray[switchWithIndex] = temp; } }4.1234 Huy hiệu vàng22 Huy hiệu bạc52 Huy hiệu Đồng
0 1 8 7 6 5 4 3 2 9Viết mã này
Đã trả lời ngày 23 tháng 11 năm 2016 lúc 20:15
Tanuj Yadavtanuj YadavNov 23, 2016 at 20:41
1.21113 huy hiệu bạc21 Huy hiệu đồng
import java.util.Scanner; import java.util.Random; public class smallbig { public static void main(String[] args) { Scanner scan = new Scanner(System.in); Random randomGenerator = new Random(); int num = scan.nextInt(); int[] myArray = new int[num]; for (int i = 0; i < myArray.length; ++i) { int randomInt = randomGenerator.nextInt(100); myArray[i] = randomInt; } for(int k=0; k < myArray.length; k++) { System.out.print(myArray[k] + " "); } System.out.println(); int smallest = myArray[0]; int largest = myArray[0]; int sIndx = 0; int lIndx = 0; for (int i = 1; i < myArray.length; i++) { if (myArray[i] > largest) { largest = myArray[i]; lIndx = i; } if (myArray[i] < smallest) { smallest = myArray[i]; sIndx = i; } } System.out.println(); System.out.println("Smallest = "+smallest); System.out.println("largest = "+largest); System.out.println("Smallest Index = "+sIndx); System.out.println("largest Index = "+lIndx); swapSmallAndLargest(num, myArray, sIndx, lIndx); for(int k=0; k < myArray.length; k++) { System.out.print(myArray[k] + " "); } } private static void swapSmallAndLargest(int num, int[] myArray, int sIndx, int lIndx) { int temp = 0; temp = myArray[sIndx]; myArray[sIndx] = myArray[0]; myArray[0] = temp; temp = myArray[lIndx]; myArray[lIndx] = myArray[num-1]; myArray[num-1] = temp; } }Tôi sẽ khuyên không nên sử dụng máy quét hoặc giá trị ngẫu nhiên để thử nghiệm vì kết quả không thể được sao chép (ít nhất là không dễ dàng). Hãy cẩn thận với chỉ số mảng là gì và giá trị là gì ở một chỉ mục cụ thể. Điều này có thể dẫn đến sự nhầm lẫn rất nhanh. ^^Mar 15, 2017 at 13:24