【问题标题】:Trying to get a For Loop to work试图让 For 循环工作
【发布时间】:2023-03-10 03:05:02
【问题描述】:

我正在尝试编写一个程序,在第一行,您输入您希望 for 循环迭代的次数,在第二行,您输入数组的值,在第三行,您在数组中输入所需的数字。我的程序要么不做我想做的事,要么在我身上崩溃。到目前为止,这是我的程序代码:

import java.util.*;

public static void main(String[] args) {

    Scanner input = new Scanner (System.in);

    int n = input.nextInt();


    for (int i=0; i<n; i++)
    {
        int value = input.nextInt();
        int[] arr = new int[value];
        arr[i] = input.nextInt();
    }
}

我能做什么?请帮忙。我什么都试过了!此外,如果有人可以帮助我按升序对数字进行排序,然后在每行中显示中间数字,那将有所帮助,但首先要做的是。谢谢。

【问题讨论】:

    标签: java arrays sorting for-loop


    【解决方案1】:

    我相信这更多的是你所追求的。我单独输出条目,但你可以很容易地组合起来。

        public static void main(String[] args) 
    {
           Scanner input = new Scanner (System.in);
           try
           {
           System.out.println("Number of times to loop:");
    
           int numEntries = input.nextInt();
           int[][] valueArrays = new int[numEntries][];
    
            for (int i=0; i<numEntries; i++)
            {
                System.out.println("Size of array #"+i+": ");
                int arrayLen = input.nextInt();
                int[] inputArray = new int[arrayLen];
                for (int j = 0; j < arrayLen; j++)
                {
                  System.out.println("Enter value at index "+j+": ");
                  inputArray[j] = input.nextInt();
                }
    
                Arrays.sort(inputArray);
                valueArrays[i] = inputArray;
            }
    
            for (int l=0; l < valueArrays.length; l++)
            {
                int[] values = valueArrays[l];
                for (int m=0; m < values.length; m++)
                {
                    System.out.println("Value of array #"+l+" saved at index "+m +": " + values[m]);
                }
    
                if ((values.length % 2) == 0)
                {
                    int start = values.length/2;
                    int end = start + 1;
                    System.out.println("Middle values in array #"+l+" saved at indices " + start + " and " + end);                                          
                }
                else
                {
                    int start = values.length/2;
                    System.out.println("Middle value in array #"+l+" saved at index " + start);                                         
                }
    
            }
    
        }
        finally
        {
            input.close();
        }
    
    }       
    

    【讨论】:

    • 这很好,但我被困在第二个循环上。我只应该显示中间数字,循环显示整个数组。你能提供什么帮助吗?
    • 很高兴为您提供帮助。我猜你发现“m”循环正在按排序顺序打印出数组,所以如果你不需要它,只需将其删除。
    【解决方案2】:

    您正在循环内的每次迭代中创建一个新数组。

    您应该让int[] arr = new int[value]; 退出循环:

    int arraySize = input.nextInt();
    int[] arr = new int[arraySize];
    
    for (int i=0; i<arraySize; i++)
    {
        int value = input.nextInt();
        arr[i] = value;
    }
    

    如果您不想限制用户的大小,请改用ArrayList

    【讨论】:

    • 不幸的是,这不起作用。我尝试循环它 4 次,但它只循环了一次。
    • 您需要输入一些内容。nextInt 等待您的输入。
    • run: 4 5 1 6 4 8 3 BUILD SUCCESSFUL (total time: 10 seconds) 这是我尝试运行时的样子。
    • 4 是我希望它循环的次数,5 是数组的大小,之后的数字是我尝试放入数组的数字。
    【解决方案3】:

    问题 1:我的程序要么没有做我想做的事。

    不要在 for 循环中初始化数组,因为循环会在每次迭代时创建一个新数组。

     Scanner input = new Scanner (System.in);
        System.out.println("Enter no. of elements in array");
        int n = input.nextInt();
    
        int[] arr = new int[n];
        System.out.println("Array length set to "+n);
        for (int i=0; i<n; i++)
        {
            System.out.println("Enter value for index "+i);
    
            arr[i] = input.nextInt();
            System.out.println(arr[i]+" Value saved at index "+i);
        } 
    

    DEMO1

    问题2(在下面的cmets中描述):对数组进行排序并显示中间数

    class Ideone
    {
        static int[] countingSort(int[] numbers) {
        int max = numbers[0];
        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i] > max)
                max = numbers[i];
        }
    
        int[] sortedNumbers = new int[max+1];
    
        for (int i = 0; i < numbers.length; i++) {
            sortedNumbers[numbers[i]]++;
        }
    
        int insertPosition = 0;
    
        for (int i = 0; i <= max; i++) {
                for (int j = 0; j < sortedNumbers[i]; j++) {
                        numbers[insertPosition] = i;
                        insertPosition++;
                }
        }
        return numbers;
    }
    
    
    
        public static void main (String[] args) throws java.lang.Exception
        {
    
        Scanner input = new Scanner (System.in);
        System.out.println("Number of times to loop:");
        int n = input.nextInt();
    
       // int[] arr = new int[n];
       // System.out.println("Array length set to "+n);
        for (int i=1; i<=3; i++)
        {
            System.out.println("Size of array #"+i+": ");
            int alen = input.nextInt();
            int[] arr = new int[alen];
            System.out.println("Value in array #"+i+": ");
            for (int j=0; j<alen; j++){
            System.out.println("Enter value at index "+j+": ");
             arr[j] = input.nextInt();
            }
            arr=Ideone.countingSort(arr);
            for (int l=0; l<alen; l++)
             System.out.println(arr[l]+" Value of array #"+i+" saved at index "+l);
           System.out.println("Middle value in array #"+i+" saved at index "+arr[alen/2]);
            }
    
        }
    
    }
    

    DEMO2

    【讨论】:

    • 对不起,这不起作用。我告诉程序循环 3 次,它只循环了一次。
    • @Frank 你检查过我回答中给出的上面的演示
    • 是的。我将代码放入我的程序并进行了测试。它没有用。
    • 输出应该是这样的:Number of times to loop: 3 / Size of array #1: 5 / Values in array #1: 1 2 3 4 5 / Size of array #2: 3 / Values in array #2: 9 4 2 / Size of array #3: 7 / Values in array #3: 8 10 2 11 20 1 15 在每个斜线之间是一个 nextLine。有道理?然后,我应该取出每个数组,按数字顺序对其进行排序,找到中间的数字(注意这些都是奇数值),然后显示中间的数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2021-08-21
    • 2020-01-30
    • 2011-08-14
    相关资源
    最近更新 更多