试图让For循环工作

时间:2015-02-03 11:00:04

标签: java arrays sorting for-loop

我正在尝试编写一个程序,在第一行,你输入你希望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();
    }
}

我该怎么办?请帮忙。我已经尝试了一切!此外,如果有人可以帮助我按升序排序数字,然后在每行显示中间数字,这将有所帮助,但首先是第一件事。谢谢。

3 个答案:

答案 0 :(得分:0)

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

你应该从循环中获得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

答案 1 :(得分:0)

  

问题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(在下面的评论中描述):对数组进行排序并显示中间数

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

答案 2 :(得分:0)

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

    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();
    }

}