2015-11-22 4 views
0

Итак, моя задача - прочитать файл по строкам и сохранить целые числа в массиве. Затем добавьте целые числа в пятнах 1-5, 2-6, 3-7 и т. Д. И сохраните их в новый массив.Как сравнить два массива разных размеров?

В массиве 1 есть еще 4 значения, чем массив 2. Мне нужно сравнить эти массивы и посмотреть, массив array1 равен 0.999 больше, чем array2.

Если это действительно больше, мне нужно распечатать МЕСТО числа в массиве 1.

Сейчас моя проблема заключается в моем коде выводе, что каждое число больше, чем соответствующее число в массиве- .

Код:

import java.io.*; 
import java.util.Arrays; 
import java.util.Scanner; 

public class Asgn7 
{ 
    public static void main(String[] args) throws FileNotFoundException 
    { 
     Scanner file = new Scanner(new File("asgn7data.txt")); 
     double[] array = new double[file.nextInt()]; 
     double[] newArray = new double[array.length - 4]; 
     double tempVal = 0; 
     int j = 0; 
     int count = 0; 

     while(file.hasNext()) 
     { 
     for(int i = 0; i < array.length ; i++) 
     { 
      array[i] = file.nextInt(); 
     } 

     for(j = 0; j < array.length - 4; j++) 
     { 
      for(int k = 0; k < 5; k++) 
      { 
       newArray[j] += array[j+k]/5; 
      } 

     } 

     for(int i = 2; i < array.length; i++) 
     { 
      if(array[i] > (newArray[i-2] + 0.999)); 
      { 
       count++; 
       tempVal = count; 
      } 

      System.out.println(tempVal); 
     } 
     } 

    } 
} 

enter image description here

значения, которые должны быть сравниваемых от 3-13.

+0

Не уверен в вашей логике. Числа в 'newArray' не такие, как вы указали, а среднее из пяти чисел в спортивных состязаниях 1-5, в среднем 2-6 и т. Д. Кроме того, вы сравниваете все числа в' array' с одним, конкретным элемент в 'newArray' (элементы' j-2' и 'j' не меняются. Что именно вы пытаетесь достичь этим? – RealSkeptic

+0

В среднем, правильно, это плохо, если это i-2 ? –

+0

@RealSkeptic -> i = 2, так что массив [i] начинается с третьего индекса, и j-2 был там, потому что, когда я кладу i-2 с newArray [i-2], я получаю выход of bounds error –

ответ

1

Судя по изображению, вы не помещаете значения в правильный индекс во втором массиве, или вы не соответствуете правильным.

Если вы хотите, чтобы она выглядела так же, как на картинке, то второй массив должен быть объявлен:

double[] newArray = new double[array.length - 2]; 

И петля, чтобы заполнить его следует заменить на:

for(j = 2; j < array.length - 2; j++) 
    { 
     for(int k = -2; k <= 2; k++) 
     { 
      newArray[j] += array[j+k]/5; 
     } 

    } 

Это будет поместите средние значения в третьем, четвертом, пятом ... элементах в newArray. И теперь вы можете сравнить их непосредственно:

for(int i = 2; i < array.length - 2; i++) 
    { 
     if(array[i] > (newArray[i] + 0.999)) 
     { 
      count++; 
      tempVal = count; 
     } 

     System.out.println(tempVal); 
    } 

Если вы хотите сохранить два неиспользуемых пространств, как вы изначально делали, а не отвечать именно на картину, то вы должны вычислить значения, как вы изначально делали. Но не забудьте сравнить каждый элемент с одним двумя местами перед ним и остановиться 2 места до конца.

Вместо

for(int i = 2; i < array.length; i++) 

использования

for(int i = 2; i < array.length - 2; i++) 

Чтобы напечатать расположение, ваш конструкт с count и tempVal является ненужным.Вам просто нужно распечатать i+1. Также обратите внимание, что у вас есть ; после вашего if. Это означает, что это пустой if, а блок после него всегда выполняется. Никогда не имеют ; после if, for, while и т.д.

+0

Я изменил код, на ваш, он теперь распечатывается с 1-11. Какие-нибудь советы? –

+0

@JonRoy Я отредактировал свой ответ. Раньше я просто копировал ваш код. Но этот код был неправильным. – RealSkeptic

+0

oh jesus, был; что делает мой ответ совершенно неправильным? Спасибо, чувак, он отлично работает сейчас. –

0

Не ясно, что вы просите в своем вопросе, но не ставя под сомнение то, что логика, просто глядя на ваш код:

for(int i = 2; i < array.length; i++) 
    { 
     if(array[i] > (newArray[i-2] + 0.999)); 
     { 
      count++; 
      tempVal = count; 
     } 

     System.out.println(tempVal); 
    } 
    } 

, если переместить System.out строку следующим образом Я думаю, что вы получите то, что вы ожидаете в следующем:

for(int i = 2; i < array.length - 2; i++) 
    { 
     if(array[i] > (newArray[i-2] + 0.999)); 
     { 
      System.out.println(tempVal); 
      // count++; 
      // tempVal = count; 
     } 


    } 
    } 

PS: Пожалуйста, обратите внимание, что я также изменил границы для петли, чтобы остановить итерации на 13-й член ARRA y, вместо 15.

+0

Это печатает (4,6,4,7,11,8,10,6,10,13,6), что числа, которые он должен сравнивать, но он, похоже, не распознает, когда newArray [1-2] больше, чем он. –

0

Вы уверены, что вы разбираете числа правильно? См. Java: Reading integers from a file into an array Почему вы не распечатываете их после разбора для проверки?

Кстати, это будет переливаться индекс 2-го массива (так как он создается с помощью нового двойного [array.length - 4]):

for(int i = 2; i < array.length; i++) 

так делает ваш код запуска?

+0

Он правильно печатает цифры, да, и он запускает –

+0

, это не звучит логично для меня - он должен вызывать исключение, так как индекс второго массива выходит за пределы диапазона: newArray [i-2], когда i = array.length-1 (см. последний цикл цикла) будет newArray [array.length-1-2] aka newArray [array.length-3], но вы определили newArray, чтобы иметь элементы array.length-4, поэтому максимальный индекс в он должен быть array.length-5, который меньше, чем array.length-3, на две позиции –

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