2016-11-30 3 views
0

Я только что провел мой урок на массивах вчера в классе AP Computer Science и работаю над назначением, которое связано с взятием целых чисел и помещением их в массив. Я не узнал, как сделать таблицу и как сделать 2d и 3d массивы, если я даже знаю, что они собой представляют. В любом случае, проект, над которым я работаю, находится здесь:Как вставить введенные целые числа от пользователя в массив?

«Разработка и внедрение приложения, которое считывает произвольное число целых чисел, находящихся в диапазоне от 0 до 50 включительно, и подсчитывает, сколько вхождений каждого из них введено. был обработан, распечатал все значения (с количеством вхождений), которые были введены один или несколько раз ».

я уже нашел возможные решения на Stack Overflow here:

, но я не узнал HashMap или карту еще и вывод их решений не один, что я предполагаю, чтобы получать.

Что я знаю о моем вопросе, как напечатать первую строку массива, который будет выглядеть примерно так, но без таблицы:

Array

То, что я не знаю, как добавить еще строка и как подсчитать количество целых чисел, введенных пользователем, и сколько раз одного и того же числа.

Вот мой код:

Я думаю, что коды под моим цикл не правильно, но я не уверен, что я могу сделать, вместо того, что будет делать его работу. Вот что возможный выход может выглядеть следующим образом:

1 2 3 4 5 6 7 8 9... 48 49 50  //Row from 1 to 50 
3 1 0 2 0 0 0 3 1  0 0 0  //user typed "1" 3 times, typed "2" 1 time... 
+0

Это, кажется, очень связано с вашей проблемой, хотя и не идентичны: [Подсчет вхождений чисел в массиве] (http://stackoverflow.com/questions/40855544/counting-occurences-of-integers-in-a-java-array/) – Gendarme

ответ

0

Если вы не готовы использовать HashMap или ArrayList, то эта задача может быть решена с помощью двух массивов. Один массив назовем его nums, который содержит все целые числа в диапазоне от 0 to 50 и еще один массив, называемый occur, который содержит вхождение каждого введенного числа. Теперь, чтобы обрабатывать входы, вам нужно продолжать принимать входные данные от пользователя, пока он не войдет в -1 (Если это то, что я предположил правильным в соответствии с заявлением о проблеме). Итак, основные шаги, необходимые для достижения этой цели, перечислены ниже:

  1. Создать бесконечный цикл
  2. начать принимать входные данные. Скажем, n = scanner.nextInt()
  3. Если введенное значение n больше 50, просто игнорируйте его.
  4. Включите это введенное значение в значение nums[n] и одновременно увеличит его значение на nth на occur[n].
  5. Выход из цикла, если n == -1.

Теперь фрагмент кода должен быть похож на это:

Scanner sc = new Scanner(System.in); 
    int[] nums = new int[51]; //Array size is 51 since it should hold numbers from 0 to 50 inclusive. 
    int[]occur = new int[51]; 


    for(;;){ 
     int n = sc.nextInt(); 
     if(n > 50){ 
      continue; 
     } 
     if(n == -1){ 
      break; 
     } 
     occur[n] += 1; 
     nums[n] = n; 
    } 

Позже, когда перерывы управления из цикла, вы можете перебирать как nums и occur и отображения результатов, как это:

System.out.println("All Numbers entered:"); 
     for(int i = 0; i < nums.length; i++){ 
      System.out.print(nums[i] + " "); 
     } 
     System.out.println(); 
     System.out.println("All Occurrences: "); 
     for(int i = 0; i < occur.length; i++){ 
      System.out.print(occur[i] + " "); 
     } 

И, следовательно, полный метод должен быть как:

public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     int[] nums = new int[51]; 
     int[]occur = new int[51]; 


     for(;;){ 
      int n = sc.nextInt(); 
      if(n > 50){ 
       continue; 
      } 
      if(n == -1){ 
       break; 
      } 
      occur[n] += 1; 
      nums[n] = n; 
     } 

     System.out.println("All Numbers entered:"); 
     for(int i = 0; i < nums.length; i++){ 
      System.out.print(nums[i] + " "); 
     } 
     System.out.println(); 
     System.out.println("All Occurrences: "); 
     for(int i = 0; i < occur.length; i++){ 
      System.out.print(occur[i] + " "); 
     } 
     sc.close(); 
    } 

Одним из возможных результатов, порожденных этим фрагмент коды выглядят следующим образом:

All Numbers entered: 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 
All Occurrences: 
1 3 5 3 3 3 4 3 3 3 3 3 2 2 2 1 1 1 1 1 2 1 2 3 3 3 3 3 3 1 3 3 3 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 2 

Я думаю, что это то, что вы пытаетесь достичь, и я надеюсь, что это поможет вам в обучении.

0

попробуйте этот код будет полезно ... он сломается вход в -1 ...

import java.util.Scanner; 

class HelloWorld { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    Scanner input = new Scanner(System.in); 

    int[] number = new int[50]; 

    System.out.print("Enter the integers between 0 to 50: "); 
    for (int i = 0; i < number.length; i++) { 
     int a = input.nextInt(); 
     number[a] += a; 
     if (a == -1) 
      break; 
    } 
    for (int i = 0; i < number.length; i++) { 
     if (number[i] != -1) { 
      if (number[i]/i > 1) 
       System.out.println(i + " occurs " + number[i]/i + " times"); 
      else 
       System.out.println(i + " occurs " + number[i]/i + " time");    } 
     } 
    } 
} 
+0

В вопросе «System.out.println (« Введите целое число (от -1 до quit ");" –

+1

@KCWong отредактировал мой ответ –

+0

@AbhishekSingh Я использовал ваш код, но когда я набрал -1, я получаю исключенную ошибку исключения, потому что 'number [a] + = a;' can not store '- 1 " – Nub

1

Так несколько вещей.

Использование цикла while - хороший первый шаг! Где я думаю, что вы собираетесь не так это с

for (int num = 0; num <= LIMIT; num++){//to make a row from 0 to 50 

Вам не нужно делать это каждый раз, когда в пределах цикла. Получите всю информацию от пользователя (до тех пор, пока пользователь не введет -1), а затем напечатайте все после этого.

Хороший способ подумать о сохранении ваших вхождений состоит в том, чтобы сделать массив длиной 50 (например, вы сделали) и увеличивать индекс, соответствующий номеру, введенному пользователем (помните, что массивы являются 0-индексированными). Затем вы можете просто распечатать две строки с одной строкой с номерами от 1 до 50, а другая строка будет напечатана с помощью простого цикла и оператора печати.

Это предназначалось, чтобы помочь вам без разработки решения для вас, особенно потому, что это, по-видимому, проблема домашних заданий, и важно попытаться выяснить эти концепции самостоятельно! Если у вас есть еще вопросы, не стесняйтесь спрашивать!

+0

Благодарим вас за подробный ответ! Однако не могли бы вы рассказать мне, как увеличить индекс, который соответствует ~, с номером, который вводит пользователь? – Nub

+0

Вам действительно не нужно увеличивать индексы. Когда вы получите вход от пользователя, проверьте, что он попадает в ваш желаемый диапазон, а затем просто скажите 'array [userInput-1] ++'. Причина, по которой мы 'userInput-1', состоит в том, что массивы индексируются 0! – Jay

0

Следующее сделает, вам понадобится Java8.

public static void main(String[] args) { 
    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9,1, 2, 3, 1); 
    int find = 1; 
    System.out.println(list.stream().filter(x->x==find).toArray().length); 
} 
0

Я начал следовать @Shyam Baitmangalkar своим указаниям о том, как это сделать, и я сделал некоторые небольшие корректировки со сканером и вроде бы выполнил мои ожидания. Однако иногда, когда я вхожу в «-1», он не уходит. Я также должен ввести много целых чисел перед тем, как уйти. Я думаю, что проблема в том, что каким-то образом инструкции if не выполняются. В любом случае, вот мой окончательный код, который я придумал:

import java.util.Scanner; 
public class asdf 
{ 
public static void main(String[] args) 
{ 
     Scanner sc = new Scanner(System.in); 
     int[] nums = new int[51]; 
     int[]occur = new int[51]; 

     System.out.println("Enter an integer (-1 to quit)"); 
     int integer = sc.nextInt(); 
     //for(int index = 0; index <= integer; index++){ 
     for(;;){ 
      System.out.println("Enter an integer"); 
      int n = sc.nextInt(); 
      if(n > 50){ 
       continue; 
      } 
      if(n == -1){ 
       break; 
      } 
      occur[n] += 1; 
      nums[n] = n; 
     } 

     System.out.println("All Numbers entered:"); 
     for(int i = 0; i < nums.length; i++){ 
      System.out.print(nums[i] + " "); 
     } 
     System.out.println(); 
     System.out.println("All Occurrences: "); 
     for(int i = 0; i < occur.length; i++){ 
      System.out.print(occur[i] + " "); 
     } 
     sc.close(); 
} 
} 

Выход:

Enter an integer 
5 
Enter an integer 
3 
Enter an integer 
34 
Enter an integer 
5 
Enter an integer 
7 
Enter an integer 
5 
Enter an integer 
3 
Enter an integer 
2 
Enter an integer 
4 
Enter an integer 
6 
Enter an integer 
6 
Enter an integer 
43 
Enter an integer 
46 
Enter an integer 
77 
Enter an integer 
5 
Enter an integer 
3 
Enter an integer 
4 
Enter an integer 
6 
Enter an integer 
7 
Enter an integer 
54 
Enter an integer 
4 
Enter an integer 
-1 
All Numbers entered: 
0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0 32 0 34 0 0 0 0 0 0 0 0 43 0 45 46 0 0 0 0 
All Occurrences: 
0 1 3 11 9 9 8 6 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 2 1 0 0 0 0 
Смежные вопросы