当程序运行时,它会要求您输入产品名称和价格,然后每当您按-1时它将停止并显示输入的产品和价格的列表。然而,问题是我写了一个选择排序算法,按PRICE按升序对列表进行排序。输出不是我的预期。看看这段代码中的“//选择排序”
import java.util.Scanner;
public class ProductPrices {
private static Scanner keyboard = new Scanner(System.in);
private static Scanner key = new Scanner(System.in);
final static int arrayLength = 1000; //maximum array size
static float[] productPrice = new float[arrayLength]; //stores the prices of products
static String[] productName = new String[arrayLength]; //stores the names of products
public static void main(String[] args) {
System.out.println("SHOPPING. Press -1 to quit anytime.\n");
for(int i=0; i<arrayLength; i++) {
System.out.print("Product: ");
productName[i] = keyboard.nextLine();
if(productName[i].equals("-1"))
break;
System.out.print("Price: $");
productPrice[i] = key.nextFloat();
if(productPrice[i] < 0)
break;
}
System.out.println("\nList of the SHOPPING!\n---------------------");
for(int i=0; i<productPrice.length; i++) {
if(productName[i] == null || productName[i].equals("-1") || productPrice[i] < 0)
continue; // null arrays will not be displayed.
else {
// Selection sort
if(productPrice[i] > productPrice[i+1]) {
float temp = productPrice[i];
productPrice[i] = productPrice[i+1];
productPrice[i+1] = temp;
}
System.out.printf("Item: %s %.2f\n", productName[i], productPrice[i]);
}
}
}
}
For example :::Input::: Product: apple Price: $2.35 Product: pie Price: $1.36 Product: cereal Price: $7.4 Product: -1 :::Output::: Item: apple 1.36 Item: pie 2.35 Item: cereal 0.00 That is incorrect, it should be Item: pie 1.36 Item: apple 2.35 Item: cereal 7.40
答案 0 :(得分:0)
基本上你已经错误地实现了选择排序。以下是修复它的代码,包括一个计数器,用于计算已输入的产品数量(使实现更加清晰)。另外,正如另一篇文章所说,你不要在你的例子中交换名称,只交换价格。我认为以下内容应该有效:
public static void main(String[] args) {
System.out.println("SHOPPING. Press -1 to quit anytime.\n");
int prodCount = 0;
for(int i=0; i<arrayLength; i++) {
System.out.print("Product: ");
productName[i] = keyboard.nextLine();
if(productName[i].equals("-1"))
break;
System.out.print("Price: $");
productPrice[i] = key.nextFloat();
if(productPrice[i] < 0)
break;
prodCount++;
}
System.out.println("\nList of the SHOPPING!\n---------------------");
for (int j = 0; j < prodCount-1; j++) {
int iMin = j;
for (int i = j+1; i < prodCount; i++) {
if (productPrice[i] < productPrice[iMin]) {
iMin = i;
}
}
if ( iMin != j ) {
float temp = productPrice[j];
productPrice[j] = productPrice[iMin];
productPrice[iMin] = temp;
String tempn = productName[j];
productName[j] = productName[iMin];
productName[iMin] = tempn;
}
}
for(int i=0; i<prodCount; i++) {
System.out.printf("Item: %s %.2f\n", productName[i], productPrice[i]);
}
}