0

私の主な目的は、この種の出力を取得することです。これは、値とそれが配列に表示される回数を示します。以下は例ですが、コード中に、配列へのデータ整数の入力をユーザーに求めます

例:配列の場合:{-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);      
    }
}

これが私の出力ですが、これは私が望んでいたものではありません、

Enter integers into the system, to quit enter -99
12
3123
3123
11
22
-99
Successfully terminated by inputting -99

Array list: {12,3123,3123,11,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,}Array list: {
}

N       Count
3123        48
4

4 に答える 4

0

次のことを試してみてください。

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

    }

}

出力

Enter integers into the system, to quit enter -99
5
6
5
8
4
-99
Successfully terminated by inputting -99

Input Values    {5, 6, 5, 8, 4}
N       Count
 8      1
 5      1
于 2012-05-10T16:02:23.297 に答える
0

インクリメントnumberして、電流が表示された回数をカウントしようとしますがarray[i]、値を0にリセットすることはありません。

また、メソッドの最後では、N Countテーブルの1行のみを印刷しています。インデックスの一意の要素ごとに1行を印刷する場合は、複数の行を印刷する必要はありませんか?

配列内の要素の出現をカウントするためのより簡単な方法があり、それをソートする必要はありません-ヒントを使用することを検討してMap<Integer, Integer>ください。

于 2012-05-10T15:52:49.243 に答える
0

私がすることは、valueとcountの2つのインスタンスを持つ新しいノードクラスを作成することです。新しい番号に遭遇するたびに、その値で新しいノードを作成し、その数を1つ増やします。ノードのリストを作成し、このリストにノードを追加します。次の入力では、値が以前に確認されているかどうかをループチェックします。

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.get(i).valuesとスワッピングを比較してリストを並べ替えます(バブルソートが思い浮かびますが、並べ替える方法はたくさんあります)

その後、値を出力するだけでカウントされます

于 2012-05-12T21:26:20.330 に答える
-1

これが配列の使用方法のレッスンではない場合は、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 ());
}

どれだけ短くてシンプルかわかりますか?要素を追加するだけです。要素がいくつ含まれているかを事前に知る必要はありません。終了をマークするためのマーカーフィールドや外部値は必要ありません!

使用法:

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

値を収集するための最初のアイデアは、インデックスで取得したい場合、または繰り返し処理したい場合は、単純な古い配列ではなく、ArrayListである必要があります。配列は例外的な場合にのみ役立ちます-最初からサイズを事前に確実に知っている場合。

ArrayListsは高速です、信じてください-いいえ-信じないでください、テストしてください!

于 2012-05-12T23:25:05.330 に答える