2016-11-10 15 views
3

Im работает над чем-то для класса, и я застрял. Я верю им довольно близко, но не знаю, куда идти. Когда я запускаю свой код, я получаю свои массивы десять раз, что должно иметь какое-то отношение к моему циклу. Кроме того, в моих массивах я не уверен, как создать диапазон от 20 до 50. В настоящее время моя составляет от 1 до 50. Наконец, мой вывод не совсем то, что нужно. Любая помощь будет принята с благодарностью. Вот вопрос, за которым следует мой код.Java Random Arrays

Создайте массив с именем array1 с 10 случайными целыми числами в диапазоне от [20 50]. Затем создайте массив с именем array2 с тем же размером массива1. Затем скопируйте числа в массиве 1, которые больше 35 в array2. Pad 0s в массиве2, если число не скопировано. Например, если array1 равен {34, 23 45, 39, 28, 41, 33, 23, 42, 48}, array2 будет {45, 39, 41, 42, 48, 0,0,0,0,0 }

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

public class Arraylab6 { 
    public static void main(String[] args) { 
     int x; 
     int[] array1 = new int[10]; 
     int[] array2 = new int[10]; 
     Random rand = new Random(); 
     for (int i = 0; i < array1.length; i++) { 
      int h = rand.nextInt(50); 
      array1[i] = h; 
     } 
     System.out.println(Arrays.toString(array1)); 
     for (int i = 0; i < array1.length; i++) { 
      if (array1[i] > 35) { 
       array2[i] = array1[i]; 
      } else { 
       array2[i] = 0; 
      } 
      System.out.println(Arrays.toString(array1)); 
      System.out.println(Arrays.toString(array2)); 
     } 
    } 
} 
+0

Печать после 'for-loop', а не внутри него. – bradimus

+0

Подумайте, как вы копируете значения в массиве2. Если первое число> 35 находится в индексе 5, где вы должны поместить его в массив2? Где ваш код размещает его прямо сейчас? – Stefan

ответ

3

Вычислить случайное число между диапазоном вы хотите затем добавить начальное значение:

int h = rand.nextInt(31) + 20; 

Также для печати несколько раз у вас есть печать внутри цикла for. Вы должны переместить строки:

System.out.println(Arrays.toString(array1)); 
System.out.println(Arrays.toString(array2)); 

вне цикла for.

5

im not sure, как создать диапазон от 20-50. В настоящее время моя составляет от 1 до 50.

int h = rand.nextInt(31)+20; //nextInt(31) = range from 0-30, then add 20 to the result 

Когда я запускаю мой код им получать мои массивы в десять раз

Ваших println звонков в вашем for цикла, переместите их вниз.

Кроме того, ваше решение не удовлетворяет требованиям, поскольку вы помещаете любое число> 35 в тот же индекс, что и другой массив. Вместо этого, следить за указательным вставки, и переместить его при копировании int:

int copyIndex = 0; 
for (int i = 0; i< array1.length; i++) 
{ 
    if (array1[i]>35){ 
    array2[copyIndex++]=array1[i]; //Add 1 to copyIndex each time a value is copied 
} 

Вам также не нужно «подушечка» с нулями, так как значение int «s по умолчанию уже 0.

+0

Спасибо, Циркон. Когда-нибудь я надеюсь, что так хорошо, как ты! – user1729377

2

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

int random = (int) (Math.random() * 31 + 20); 

Во-вторых, вам нужно поджать операторы вывода из вашего последнего для цикла:

for (int i = 0; i< array1.length; i++) 
    { 
     if (array1[i]>35) 
     { 
     array2[i]=array1[i]; 
     } 
     else { 
     array2[i]=0; 
     } 


    } 
    System.out.println(Arrays.toString(array1)); 
    System.out.println(Arrays.toString(array2)); 
} 
} 
+0

Thats почти идеально. Мне просто нужно переместить нули в заднюю часть массива два сейчас. Есть идеи?? – user1729377

+0

О, вы хотите переместить ноль в спину? Ну, это будет другой вопрос. Но вам придется снова перейти к массиву и создать новый массив со всеми элементами, равными 0, проверить отсортированный массив для числа, если это не 0, добавить его в новый массив, иначе пропустить. и это оставит вам массив, который вы хотите. – BlackHatSamurai

2

Вы можете использовать ThreadLocalRandom класс для генерации случайных чисел в данный диапазон:

ThreadLocalRandom.current().nextInt(min, max+1); 
+0

Мне нравится это решение, но я не думаю, что OP может использовать что-то подобное в домашней работе без какого-либо объяснения. – DejaVuSansMono

1

Предыдущие ответы верны относительно метода Random и println(). Я просто хочу, чтобы добавить фантазии способ, как заполнить array2 из array1 в java8 :) Вместо:

for (int i = 0; i < array1.length; i++) { 
     if (array1[i] > 35) { 
      array2[i] = array1[i]; 
     } else { 
      array2[i] = 0; 
     } 
} 

вы можете использовать эту ява 8 код:

int[] filtered = Arrays.stream(array1) //make a stream of array1 
     .filter(value -> value > 35) //if value is greater than 35, leave that value 
     .toArray(); //create array from the result 
    //create array with zeroes that need to be added 
    int[] zeroes = new int[array1.length - filtered.length]; 
    Arrays.fill(zeroes, 0); 
    //concat zeroes 
    array2 = ArrayUtils.addAll(filtered, zeroes); //you have your final array :) 
+0

хорошая реализация java8, но запрос состоит в том, что array2 должен иметь нули в конце. – user6904265

+0

Хорошо, я немного поменял :) Хорошая точка :) –

+0

ОК, теперь он работает как запрошенный OP – user6904265

1

Другой довольно реализация:

int[] array1 = new Random().ints(10, 20, 51).toArray(); 
int[] temp = Arrays.stream(array1).filter(x -> x > 35).toArray(); 
int[] array2 = new int[10]; 
System.arraycopy(temp, 0, array2, 0, temp.length); 
System.out.println(Arrays.toString(array1)); 
System.out.println(Arrays.toString(array2)); 

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

  • Нет связанных вопросов^_^