Java 读取列中的数组输出

Java 读取列中的数组输出,java,arrays,sorting,Java,Arrays,Sorting,我的主要目的是获得这种输出:它显示值以及它在数组中出现的次数。下面是一个示例,但在代码中,我将要求用户向数组中输入数据整数 e、 对于数组:{12,3,-12,4,1,1,-12,1,-1,1,2,3,4,2,3,-12} 输出应为: N Count 4 2 3 3 2 2 1 4 -1 1 -12 4 下面是我自己的尝试,但由于某些原因,我无法存储该数组,并在代码的其他部分使用该数组: import java.util.*; public class Q4 {

我的主要目的是获得这种输出:它显示值以及它在数组中出现的次数。下面是一个示例,但在代码中,我将要求用户向数组中输入数据整数

e、 对于数组:{12,3,-12,4,1,1,-12,1,-1,1,2,3,4,2,3,-12} 输出应为:

 N  Count
 4  2
 3  3
 2  2
 1  4
-1  1
-12 4
下面是我自己的尝试,但由于某些原因,我无法存储该数组,并在代码的其他部分使用该数组:

import java.util.*;
public class Q4 
{    
    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
        int[] myarray = new int[50];

        System.out.println("Enter integers into the system, to quit enter -99");
        Scanner scan=new Scanner(System.in);

        for(int i = 0; i<myarray.length; i++)
        {
            int temp =scan.nextInt();
            if(temp!=(-99))
            {   
                myarray[i]=temp;
            }
            if(temp ==(-99))
            {
                System.out.println("Successfully terminated by inputting -99");
                System.out.println();
                break;
            }
            else if(i==(myarray.length-1))
            {
                System.out.println("successfully filled up array fully");
                System.out.println();
            }   
        }

        for(int i = 0; i<myarray.length; i++)
        {
            System.out.print(myarray[i]+",");
        }
        System.out.print("}");

        int temp=0;
        int number = 0;

        Arrays.sort(myarray);
        System.out.println("Array list: {");
        for (int i = 0; i < myarray.length; i++)
        {
            if(temp==0)
            {
                temp=myarray[i];
                number++;
            }
            else if (temp!=0)
            {
                if (temp==myarray[i])
                {
                    number++;
                }
                else
                {
                    temp=0;
                }
            }
        }
        System.out.print("}");  
        System.out.println();   
        System.out.println();   
        System.out.println("N"+"\t"+"\t"+"Count");
        System.out.println(temp+"\t"+"\t"+number);      
    }
}
您可以递增number以尝试计算当前数组[i]已被看到的次数,但从未将其值重置为0

另外,在方法的末尾,您只打印N Count表的一行。如果要为索引的每个唯一元素打印一行,是否需要打印多行


有一种更简单的方法可以计算数组中不需要排序的元素的出现次数-提示,考虑使用映射。

您应该尝试以下方法

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Scanner;

public class NumberRepetion {

    public static void main(String[] args) {
        int[] myarray = new int[50];

        System.out.println("Enter integers into the system, to quit enter -99");
        Scanner scan = new Scanner(System.in);

        ArrayList<Integer> myarrList = new ArrayList<Integer>();

        while (scan.hasNext()) {

            int temp = scan.nextInt();
            if (temp != (-99)) {

                // myarray[i] = temp;
                myarrList.add(temp);
            }
            if (temp == (-99)) {
                System.out.println("Successfully terminated by inputting -99");
                System.out.println();
                break;
            }

        }

        Hashtable<Integer, Integer> result = new Hashtable<Integer, Integer>();

        System.out.print("Input Values  {");

        int currIndex = 0 ;
        for (Integer val : myarrList) {
            if (currIndex == ( myarrList.size() - 1 )){
                System.out.print(val);
            }else{
                System.out.print(val + ", ");
            }
            currIndex++ ;
            int currVal = val;
            Integer integer = result.get(currVal);
            if (integer == null || integer == 0) {
                result.put(currVal, 1);
            } else {
                result.put(currVal, ++integer);
            }
        }
        System.out.print("}");
        System.out.println()

        Enumeration<Integer> keys = result.keys();
        System.out.println("N\t\tCount");

        while(keys.hasMoreElements()){
            System.out.println(" " +  keys.nextElement() +"\t\t" + result.get(keys.nextElement()));
        }

        //System.out.println("\n\n\n Result  " + result);

    }

}

我要做的是创建一个新的节点类,它有两个实例,value和count。每次遇到一个新的数字时,使用其值创建一个新节点,并将其计数增加一。拥有节点列表并将节点添加到此列表中。对于下一个输入,进行循环检查,检查之前是否已经看到该值,例如

for i = 0; i <list.size; i++
     if list.get(i).data == value // if it finds the value increment and break
            list.get(i).count++
            break;
     else if i==list.size-1//if it went through the list and didn't find the value, make a new node of the value and add it to the list
            make a new node
            add it to the list
在它终止后,通过比较list.geti.values和交换冒泡排序对列表进行排序,但排序的方法有很多


之后,只需打印值和计数

如果这不是如何使用数组的课程,我强烈主张与List和其他集合联系,但最好是List,具体地说是ArrayList。太方便了!这很容易

有3或4个基本操作:定义列表的构造函数、添加元素、删除元素、迭代所有元素

还有大约50种其他不常用的方法,以及使用列表等的方法

public static void main (String [] args)
{
    List <Integer> myarray = new ArrayList <Integer> ();
    System.out.println ("Enter integers into the system, to quit enter -99");
    Scanner scan = new Scanner (System.in);

    while (scan.hasNextInt ())
    {
        int temp = scan.nextInt ();
        if (temp == -99)
        {
            System.out.println ("Successfully terminated by inputting -99");
            System.out.println ();
            break;
        }
        else {
            myarray.add (temp);
            if (myarray.size () == 50)
            {
                System.out.println ("successfully filled array fully up");
                System.out.println ();
            }
        }
    }
    for (int i : myarray)
    {
        System.out.print (i + ",");
    }
    System.out.print ("}");

    Set <Integer> hsi = new HashSet <Integer> (); 
    hsi.addAll (myarray);

    Collections.sort (myarray);
    System.out.println ("Array list: {");
    int idx = 0;
    for (int i: hsi) {
        System.out.println (i + "\t" + Collections.frequency (myarray, i));
    }
    System.out.println (myarray.size ());
}
收集值的第一个想法(您喜欢通过索引获取值或希望迭代)应该是ArrayList,而不是普通的旧数组。数组仅在特殊情况下有用—首先您肯定知道大小


ArrayList很快,相信它-不-不相信它,测试它

如果要使用固定大小的数组,则需要跟踪其中实际有多少个元素。至于N-Count结果,你没有发布计算/显示这个的代码,所以我们真的不能推测他是否在创建自己的数组。我认为他不知道List、ArrayList或任何其他集合。看看家庭作业tag@Luiggi可能但是,被告知在你目前的知识范围之外做一些事情的更简单的方法从来都没有坏处。这一建议可以忽略不计。
for i = 0; i <list.size; i++
     if list.get(i).data == value // if it finds the value increment and break
            list.get(i).count++
            break;
     else if i==list.size-1//if it went through the list and didn't find the value, make a new node of the value and add it to the list
            make a new node
            add it to the list
public static void main (String [] args)
{
    List <Integer> myarray = new ArrayList <Integer> ();
    System.out.println ("Enter integers into the system, to quit enter -99");
    Scanner scan = new Scanner (System.in);

    while (scan.hasNextInt ())
    {
        int temp = scan.nextInt ();
        if (temp == -99)
        {
            System.out.println ("Successfully terminated by inputting -99");
            System.out.println ();
            break;
        }
        else {
            myarray.add (temp);
            if (myarray.size () == 50)
            {
                System.out.println ("successfully filled array fully up");
                System.out.println ();
            }
        }
    }
    for (int i : myarray)
    {
        System.out.print (i + ",");
    }
    System.out.print ("}");

    Set <Integer> hsi = new HashSet <Integer> (); 
    hsi.addAll (myarray);

    Collections.sort (myarray);
    System.out.println ("Array list: {");
    int idx = 0;
    for (int i: hsi) {
        System.out.println (i + "\t" + Collections.frequency (myarray, i));
    }
    System.out.println (myarray.size ());
}
java Numbers
Enter integers into the system, to quit enter -99
4 44 0 33 2 2 7 9 1  4 3 90 -99 
Successfully terminated by inputting -99

4,44,0,33,2,2,7,9,1,4,3,90,}Array list: {
0   1
1   1
2   2
3   1
33  1
4   2
7   1
9   1
44  1
90  1
12