Java 如何在array.length中重复此方法?
在这个程序中,我希望用户输入20个产品名称。从主要方法。这将传递给名为searchProducts的方法。但出于某种原因,它不起作用。它只允许我输入一次,然后打印出所有16种产品Java 如何在array.length中重复此方法?,java,arrays,methods,selection-sort,Java,Arrays,Methods,Selection Sort,在这个程序中,我希望用户输入20个产品名称。从主要方法。这将传递给名为searchProducts的方法。但出于某种原因,它不起作用。它只允许我输入一次,然后打印出所有16种产品 public static void main(String[] args) { String[] products= {"Pencil pouch", "pen", "Pencil sharpener", "High lighters&qu
public static void main(String[] args) {
String[] products= {"Pencil pouch", "pen", "Pencil sharpener", "High lighters", "Markers", "Erasers",
"Binder", "Notebooks", "Index cards", "Folders", "Glue", "Ruler", "Scissors", "Calculator",
"Calendar", "Backpack"};
System.out.println("Unordered list");
displayProducts(products);
sortProducts(products, 16);
System.out.println("");
System.out.println("Ordered list");
displayProducts(products);
}
private static int searchProducts(String[] products) {
Scanner sc = new Scanner(System.in);
String x = sc.nextLine();
System.out.println("Enter name of product: ");
for (int i = 0; i < products.length; i++) {
if (products[i].equals(x))
return i;
}
return -1;
}
private static void sortProducts(String products[],int n) {
for(int i = 0; i < n - 1; i++) {
int minindex = i;
String minStr = products[i];
for(int j = i + 1; j < n; j++) {
if(products[j].compareTo(minStr) < 0)
{
minStr = products[j];
minindex = j;
}
}
if(minindex != i)
{
String temp = products[minindex];
products[minindex] = products[i];
products[i] = temp;
}
}
}
private static void displayProducts(String[] products) {
for(int i = 0; i < products.length; i++){
System.out.println(products[i] + " ");
}
}
publicstaticvoidmain(字符串[]args){
String[]产品={“铅笔袋”、“钢笔”、“卷笔刀”、“高亮度打火机”、“记号笔”、“橡皮擦”,
“活页夹”、“笔记本”、“索引卡”、“文件夹”、“胶水”、“尺子”、“剪刀”、“计算器”,
“日历”、“背包”};
System.out.println(“无序列表”);
展示产品(产品);;
sortProducts(产品,16);
System.out.println(“”);
System.out.println(“有序列表”);
展示产品(产品);;
}
私有静态int searchProducts(字符串[]产品){
扫描仪sc=新的扫描仪(System.in);
字符串x=sc.nextLine();
System.out.println(“输入产品名称:”);
对于(int i=0;i
传递数组参数的方式很好
有几种方法可以将数组作为参数传递:
(/*其他参数,*/String[]参数)//这样
(字符串[]param/*,其他参数*/)//或
(/*其他参数,*/String param[])//这样
(字符串参数[]/*,其他参数*/)//或
//特例
//仅作为参数的唯一或最后一个参数
//因为有了它,您可以单独输入多个字符串参数
(/*其他参数,*/String…参数)
//数组的数组
(字符串[]参数[])
(字符串[][]参数)
(字符串参数[][])
这就是你的问题:
sortProducts(产品,20);
...
私有静态void sortProducts(字符串产品[],int n){
虽然你的数组大小是16,但是你通过了20。所以是错误的
将此方式更改为不依赖于大小
sortProducts(产品);
....
私有静态void sortProducts(字符串产品[]){//未传递大小
int n=products.length;//从数组中读取大小
编辑1-----------------
在下面的代码中,用户输入N个产品。然后打印、排序和打印数组。(未测试)
publicstaticvoidmain(字符串[]args){
int N=20;
字符串[]产品=新字符串[N];
扫描仪sc=新的扫描仪(System.in);
对于(int i=0;i
要在数组中搜索,可以执行类似操作(未测试):
publicstaticvoidmain(字符串[]args){
//…以前的代码
//主方法中的搜索块
System.out.println(“输入要搜索的产品名称,或“停止”停止:”);
字符串y=sc.nextLine();
而(y!=“停止”){
int索引=搜索产品(产品,y);
如果(索引==-1)
System.out.println(“产品“+y+”不在数组中”);
其他的
系统输出打印项次(“产品”+y+”位于“+索引”位置);
System.out.println(“输入要搜索的产品名称,或“停止”停止:”);
y=sc.nextLine();
}
}
私有静态int-searchProducts(字符串[]产品,字符串p){
对于(int i=0;i
对不起,我解决了这个问题,但它仍然不允许我问16次。它只问我一次,然后只要我按enter键,它就会打印出无序列表和有序列表下的所有产品。请查看此编辑。我看不出有任何理由期望显示的程序读取任何输入。sea开头有代码rchProducts()
读取一行,但该方法似乎从未被调用,我也没有看到任何其他代码可以读取任何输入。您的代码块不清晰,从何处调用searhProduct
?