0

配列に一意の番号が存在する回数を数えようとしています。使用されるインデックスの量は、入力された要素の量によって異なります。最初の値は考慮されていません。ループがチェックしarrays.length -1ているため、3 を 2 回入力したにもかかわらず、数値 3 がカウント 1 として表示されます。これを修正する最善の方法は、使用しないループを実行することだとわかっていますarrays.length -1が、次のようにエントリを隣のエントリと比較することはできません。if(a[i] == a[i + 1] && a[i] != 0)値が複数回出現するかどうかを確認します。カウントされた対応する配列値を使用して count メソッドにカウント値を格納し、メソッドの外側で for ループを実行するのが最善だと思いますか? 私はJavaが初めてなので、それを行う方法がわかりません。いくつかのガイダンスがあります:)

import java.util.Scanner;


public class Prac_ExeOne 
{
        static int count  = 1;
        static int numberUsed = 0; // static its used to show its a class wide variable and there is only one copy.
        static int[] Array =  new int [50]; // the maximum elements inside the array that can be used is 10;
        int size;

              public int fillArray(int[] a)
         {
                 System.out.println("Enter up to " + a.length + " nonnegative numbers.");
                 System.out.println("Mark the end of the list with a negative number.");
                 Scanner keyboard = new Scanner(System.in);

                 int next;
                 int index = 0;
                 next = keyboard.nextInt();
                 while ((next >= 0) && (index < a.length ))  
                 {
                     numberUsed++;
                     a[index] = next;
                     index++;
                     // Print out each value of next
                     System.out.println(next);
                     next = keyboard.nextInt();
                     //System.out.println("Number of indexes used" + numberUsed);
                 }
                 keyboard.close(); // close the keyboard so it can't continue to be used.
                 return index;
        }


            public int[] sort(int[] arrays)
            {

                for(int i = 0;i < arrays.length -1 ;i++ )
                {

                    int store = 0;
                    // Move Larger Values to the right.
                    if (arrays[i + 1 ] < arrays[i])
                    {
                        store = arrays[i];
                        arrays[i] = arrays[i + 1];
                        arrays[i + 1] = store;
                    }
                    // Sort swapped smaller values to the left.
                        for(int j = i; j > 1; j--)
                        {
                           if (arrays[j] < arrays[j - 1])
                           {
                           store = arrays[j];
                           arrays[j] = arrays[j - 1];
                           arrays[j - 1] = store;
                           }
                      }
                }
                return arrays;

            }
            public void count(int[] a)
            {   

                //for each element in array go through if conditons.
                System.out.println("N " + "Count");
                for(int i = 0;i < a.length -1;i++)
                {   
                    if(a[i] == a[i + 1] && a[i] != 0)
                    {
                        count++;

                    }
                    if(a[i] != a[i+1])
                    {
                        count = 1;
                    }
                    if (a[i] !=  0)
                     {
                    System.out.println(a[i] + " " + count);
                     }
                }
            }

            public static void main(String[] args) 
            {
                Prac_ExeOne score = new Prac_ExeOne();
                score.fillArray(Array);
                score.sort(Array);
                score.count(Array);


            }
        }

入力:

Enter up to 50 nonnegative numbers.
Mark the end of the list with a negative number.
3
3
2
2
-2

出力:

N Count
3 1
2 2
2 1

望ましい結果:

一言で言えば、プログラムで値を正しくカウントしてから、N の下の左側に値を表示し、カウントの下の右側の配列にその回数を表示する必要があります。

4

3 に答える 3

1

一言で言えば、プログラムに値を正しくカウントさせたい

で数えるMap:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class App {

    public static void main(String[] args) throws Exception {
        List<Integer> ints = new ArrayList<>();
        ints.add(3);
        ints.add(3);
        ints.add(2);
        ints.add(2);
        ints.add(-2);
        ints.add(5);

        Map<Integer, Integer> counts = new HashMap<>();

        for (Integer i : ints) {
            if (i < 0) {
                break;
            }
            if (counts.containsKey(i)) {
                counts.put(i, counts.get(i) + 1);
            } else {
                counts.put(i, 1);
            }
        }

        System.out.println(counts);
    }
}

出力:

{2=2, 3=2}
于 2013-09-04T14:22:22.080 に答える