2016-04-03 3 views
0

У меня возникли проблемы с печатью массива в полном объеме. Код настроен для печати последовательности случайных чисел, а количество последовательностей случайных чисел (1-12) предназначено для ввода с пользовательского ввода. Однако я не могу заставить его печатать больше, чем первое случайное число. Мне удалось распечатать всю последовательность раньше, но поскольку это назначение, и я должен использовать массивы, мой первый метод больше не работает.Массив не распечатывается полностью

import java.util.Scanner; 
import java.util.Arrays; 

public class Test4 { 
    public static void main(String[] args) { 
     int randomNumber; 
     int[] allNumbers = new int[12]; 
     Scanner keyboard = new Scanner(System.in); 

     for (int i = 1; i <= allNumbers.length; i++) { 
      allNumbers[i] = (int) (Math.random() * 999 + 1); 
      System.out.print("How many random numbers? "); 
      randomNumber = keyboard.nextInt(); 
      System.out.print("\n" + "Random numbers: "); 
      System.out.print(allNumbers[i] + " "); 
      { 
       System.out.print("\n"); 
       System.out.print("\n" + "Even numbers: " + (allNumbers[i] % 2 == 0)); 
       System.out.print("\n" + "Odd numbers: "); 
       break; 
      } 
     } 
    } 
} 

Новый код: Незавершенное ...

* Update2: Добавлено ограничение keyboard.nextint.

Обнаруженная ошибка «строковый литерал не закрывается двойной цитатой» в той части, где я пытаюсь напечатать коэффициенты и выравнивания.

* Update3: исправлена ​​ошибка выше (вызвана опечаткой).

Новая проблема: отсортированные номера (нечетные/четные) отображаются, но в неправильном формате. Они появляются как это: Нечетные: 475 Нечетные: 123 даже: 62 даже: 680 даже: 870 нечетное: 457 и т.д. Я хочу: Даже цифры: число число число число нечетные числа: номер номер number number

Также стоит поставить счетчик, который подсчитывает количество четных/нечетных случайных чисел - есть ли способ распечатать все это в одной печати? Или мне сначала нужно сделать system.out.print, а затем выдать систему f для счетчика?

Обновленный код:

import java.util.Scanner; 
import java.util.Arrays; 
public class Test7 { 


public static void main(String[] args) { 

    Scanner keyboard = new Scanner(System.in); 
    System.out.print("How many random numbers?: "); 
    int size = keyboard.nextInt(); 
    System.out.print("\n"); 
    while (size>12 || size<1); 

    int[] randNum = new int[size]; 

    for(int i = 0 ; i < randNum.length ; i++) 
     randNum[i] = (int)(Math.random() * 999 + 1); 
    System.out.println("Random numbers: " + Arrays.toString(randNum).replace("]", "").replace(",", "").replace("[", "") + "\n"); 


    for(int i = 0 ; i < randNum.length ; i++) 
    if(randNum[i] % 2 == 0) { 
    System.out.print("\r" + "Even numbers: "); 
    System.out.print(randNum[i] + " "); 
    } else { 
    System.out.print("\r" + "Odd numbers: "); 
    System.out.print(randNum[i] + " "); 
    } 


}} 
+1

, что из-за перерыва; в конце цикла for, но есть и проблемы с семантикой. – Pooya

ответ

2

Java массивы используют индекс на основе нулевой.

for(int i = 0; i < allNumbers.length ; i++) 

Следовательно, цикл for должен быть таким, как указано выше. Вероятно, вы должны получить ArrayIndexOutOfBoundException.

Кроме того, заявление break, которое вы включили в цикл for, заставляет цикл работать не один раз. Вы должны всегда использовать перерыв заявление с условием (например: в пределах если блок)

+0

Я отредактировал это, и результат будет таким же, как и раньше. Очень странно. – Varldsligist

+0

Есть ли у вас какие-либо ошибки? –

+0

Нет, просто нет номеров. – Varldsligist

1

Все, что сказал Imesha плюс это заявление:

{ 
System.out.print("\n"); 
System.out.print("\n" + "Even numbers: " + (allNumbers[i] % 2 == 0)); 
System.out.print("\n" + "Odd numbers: "); 
break; 
} 

System.out.print("\n" + "Even numbers: " + (allNumbers[i] % 2 == 0)); 
//will print true or false, if you want to display the even and odd number, you should try something like this : 

if(allNumbers[i] % 2 == 0) { 
System.out.println("Even numbers " + allNumbers[i]"); 
} else { 
System.out.println("Odd numbers " + allNumbers[i]"); 
} 
+0

Я добавил ваше решение в микс, но я не могу заставить его работать правильно. Я отправил новый обновленный код, если вы хотите посмотреть еще раз. – Varldsligist

1

Прежде всего, если вы хотите, чтобы пользователь, чтобы выбрать количество случайных чисел, вам нужно будет получить это до того, как вы создадите массив allNumbers.

Во-вторых, как сказал Имеша Судаджинга, Java основано на нулевом значении, поэтому int i нужно инициализировать до 0, чтобы избежать ArrayIndexOutOfBoundException.

В-третьих, здесь находятся скобки в последней части цикла for. Их можно удалить, не изменяя результат.

Кроме того, у вас есть разрыв в конце, который в основном останавливает цикл for после одной итерации.

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

  1. Получить количество случайных чисел от пользователя.
  2. Создайте массив allNumbers с правильным размером.
  3. Создайте цикл for, который ТОЛЬКО назначает случайные числа массиву allNumbers.
  4. Создайте новый цикл for, чтобы распечатать результаты.
0

Прочтите следующий код. Глядя на блок, который вы начали после этой строки System.out.print(allNumbers[i] + " ");, кажется, что ваши концепции нуждаются в некоторой очистке. Комментарии, чтобы помочь вам лучше понять.

Поскольку вы ничего не говорили о четном/нечетном материале, я предположил, что вы пытаетесь подсчитать количество четных и нечетных чисел, как вы найдете в коде. Дайте мне знать, если это нужно изменить.

Пожалуйста, дайте мне знать, если возникнут вопросы.

public static void main(String[] args) { 

    // how many random numbers 
    Scanner keyboard = new Scanner(System.in); 
    System.out.print("Enter array size: "); 

    int size = Integer.parseInt(keyboard.next()); 

    int[] randNum = new int[size]; 

    // fill array with random numbers 
    for(int i = 0 ; i < randNum.length ; i++) 
     randNum[i] = (int)(Math.random() * 999 + 1); 

    // to print the array, put import java.util.Arrays; at the top 
    System.out.println(Arrays.toString(randNum)); 

    keyboard.close(); 

    // go over elements looking for even/odd numbers 
    // by going over the list 2 times, you can print the even in the 
    // first iteration, odd in the second iteration 

    // i am using auxiliary lists 
    // ZERO-th WAY 
    List<Integer> even = new ArrayList<Integer>(); 
    List<Integer> odd = new ArrayList<Integer>(); 
    for(int i = 0 ; i < randNum.length ; i++) { 
     // even number found 
     if(randNum[i] % 2 == 0) 
      even.add(randNum[i]); 
     else 
      odd.add(randNum[i]); 
    } 

    System.out.println("Even: " + even); 
    System.out.println("Odd: " + odd); 

    // FIRST WAY 
    // go over elements looking for even/odd numbers 
    // by going over the list 2 times, you can print the even in the 
    // first iteration, odd in the second iteration 
    System.out.print("Even: "); 
    for(int i = 0 ; i < randNum.length ; i++) { 
     // even number found 
     if(randNum[i] % 2 == 0) 
      System.out.print(randNum[i] + " "); 
    } 

    System.out.println(); 
    System.out.print("Odd: "); 
    for(int i = 0 ; i < randNum.length ; i++) { 
     // even number found 
     if(randNum[i] % 2 == 1) 
      System.out.print(randNum[i] + " "); 
    } 
    System.out.println(); 


    // SECOND WAY 
    int evenCount = 0, oddCount = 0; 
    for(int i = 0 ; i < randNum.length ; i++) { 
     // even number found 
     if(randNum[i] % 2 == 0) 
      evenCount++; 
     else 
      oddCount++; 
    } 

    int[] evenNums = new int[evenCount]; 
    int[] oddNums = new int[oddCount]; 
    int evenNumsIndx = 0, oddNumsIndx = 0; 

    for(int i = 0 ; i < randNum.length ; i++) { 
     // even number 
     if(randNum[i] % 2 == 0) { 
      evenNums[evenNumsIndx] = randNum[i]; 
      evenNumsIndx++; 
     } else { 
      oddNums[oddNumsIndx] = randNum[i]; 
      oddNumsIndx++; 
     } 
    } 
    System.out.println("Even: " + Arrays.toString(evenNums)); 
    System.out.println("Odd: " + Arrays.toString(oddNums)); 
} 

Пример вывода:

Enter array size: 12                                       
[435, 420, 334, 248, 143, 340, 233, 940, 187, 315, 228, 132]                             
Even: [420, 334, 248, 340, 940, 228, 132]                                  
Odd: [435, 143, 233, 187, 315] 
+0

Да! Это, похоже, исправило проблему, с которой я столкнулся с массивом, не печатающим, однако мне нужно напечатать нечетные/четные числа, как описано в «User1420482», а также ограничить количество порядковых номеров не более 12. Я отправлю новый код, когда я узнаю, как это сделать. – Varldsligist

+0

Пожалуйста, не обращайте внимания на предыдущий комментарий, я исправил все, кроме бита печати. Я мог бы использовать некоторые данные по этой проблеме. – Varldsligist

+0

@ Varldsligist Вы хотите, чтобы все четные числа были на одной линии, а все нечетные числа были на другой линии? –