Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在array.length中重复此方法?_Java_Arrays_Methods_Selection Sort - Fatal编程技术网

Java 如何在array.length中重复此方法?

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

在这个程序中,我希望用户输入20个产品名称。从主要方法。这将传递给名为searchProducts的方法。但出于某种原因,它不起作用。它只允许我输入一次,然后打印出所有16种产品

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