2015-11-10 2 views
0

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

import java.util.Scanner; 

public class VelikaDN { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter numbers: "); 
     int[] array = new int[100]; 
     for (int i = 0; i < array.length; i++) { 
      array[i] = input.nextInt(); 
      // Number of elements 
      int counter = 0; 
      for (int j = 0; j < array.length; j++) { 
       if (array[j] != 0) 
        counter++; 
      } 
      System.out.println("This array has " + counter + " numbers."); 
     } 
    } 
} 

Это работает, но в конце концов я заметил что-то, что не было настолько незначительны, как я думал, что это было. Это результат: http://i.imgur.com/3mmEpUb.png Я попытался переместить печать по всему коду, попытался как-то остановить цикл, но я потерпел неудачу. Я действительно даже не уверен, в чем проблема. Я попытался отпустить эту проблему и выполнить другую задачу, но, как я уже сказал, ничего за пределами цикла не появляется.

Прошу прощения, если это сбивает с толку, я новичок в Java, и я тоже плохо разбираюсь. Если у вас есть несколько советов или альтернативное решение, не стесняйтесь просто бросить его здесь. Если есть что-то еще, мне нужно объяснить, тогда просто скажите это.

+0

Я запутался. В чем именно проблема ? –

+0

Это только начало программы, которую я делаю, и на данный момент это проблема, да. Однако, когда я пытался использовать array.length за пределами первого цикла, я не смог. –

+0

Цикл закончится, когда вы ввели ** 100 ** номеров !!! – Andreas

ответ

0

Я не вижу точку с использованием 2 вложенных циклов для (или 2 отдельных петель), его просто делает алгоритм сложности O (N^2) Вы можете проверить, если значение равно 0 в первом цикле, и если его не incremet значение счетчика

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter numbers: "); 
    int[] array = new int[2]; 
    int counter = 0; 

    for (int i = 0; i < array.length; i++) { 
     array[i] = input.nextInt(); 

     if(array[i] != 0) { 
      counter++; 
     } 
    } 

    System.out.println("This array has " + counter + " numbers."); 
} 

РЕДАКТИРОВАТЬ

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter numbers: "); 
    int[] array = new int[100]; 
    int i = 0; 

    for (; i < array.length; i++) { 
     int inputValue = input.nextInt(); 

     if(inputValue <= 0) { 
      break; 
     } else { 
      array[i] = inputValue; 
     } 
    } 

    System.out.println("This array has " + i + " numbers."); 
} 

EDIT 2 (Кредитные @Andreas)

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter numbers: "); 
    int[] array = new int[100]; 
    int i = 0; 

    while (input.hasNextInt()) { 
     int inputValue = input.nextInt(); 

     array[i++] = inputValue; 
    } 

    System.out.println("This array has " + i + " numbers."); 
} 
+0

Правильно, я идиот. Есть ли способ сделать эту работу, если я, например, устанавливаю int [] array = new int [100] (максимальный 100), а затем пользователь может ввести «случайное» количество чисел? –

+0

Вы знакомы с ArrayLists? –

+0

Не совсем .. пока. –

1

Поместите int counter=0; вне цикла, а затем разместить System.out после цикла

+0

Сделал это, застрял. –

+0

Застрял во что? С другой стороны, вы можете просто использовать ArrayList, он может дать вам размер массива и многое другое –

+0

Он печатает только первый оператор печати. –

Смежные вопросы