2016-11-17 2 views
0

Я работаю над проектом Java, и у меня возникла проблема. Я хочу иметь вычитание двух списков или массивов a и b в списке/array c, но я не знаю, как это сделать. Я хочу, чтобы «a [i] -b [i]» должен быть в следующем списке c, где значение должно быть c[i] аналогично для 5-2 = 3 любое предложение и помощь будут оценены.Как вычесть значения двух списков/массивов в Java?

Код:

public static void länge() { 
    { 
     BufferedReader br = null; 
     try { 
      br = new BufferedReader(new FileReader(new File("C:\\Users/Voodoothechild/Desktop/Pidata/Anfang.txt"))); 
      String line = null; 
      while ((line = br.readLine()) != null) {   
       { 
        BufferedReader bro = null; 
        try { 
         bro = new BufferedReader(new FileReader(new File("C:\\Users/Voodoothechild/Desktop/Pidata/Ende.txt"))); 

         String lines = null; 
         while ((lines = br.readLine()) != null) { 

          String[] anfang = line.split("\n"); 
          String[] ende = lines.split("\n"); 

          List<Integer> an = new ArrayList<Integer>(); 
          List<Integer> en = new ArrayList<Integer>(); 

          for (int index = 0 ; index<ende.length ; index++) { 

           an.add(Integer.parseInt(anfang[index])); 
           en.add(Integer.parseInt(ende[index])); 
           Integer[] anf = new Integer[an.size()]; 

           int[] result = new int[anf.length]; 

           for (int i = 0; i < result.length; i++) { 
            result[i] = anf[i] - end[i]; 
           } 

          } 
         }  
        } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } finally { 
         if (bro != null) { 
          try { 
           bro.close(); 
          } catch (IOException e) { 
           e.printStackTrace(); 
          } 
         } 
        } 
       } 
      } 
     } catch(FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch(IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (br != null) { 
       try { 
        br.close(); 
       } catch(IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 
+0

Пожалуйста исправить форматирование вашего кода, что только поможет вам для решения вашей проблемы. Кстати, зацикливание каждой пары или элементов и вычитание - это то, как я это сделаю. –

+0

Должен ли я замыкать список или массив? И tnx mate – Voodoothechild

+0

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

ответ

0

Ее довольно прямо вперед. Прежде чем решать проблему программирования. Всегда делайте это пошагово. Возьмите вашу проблему, например. Вам нужно вычесть значения из 2 массивов со значениями.

int [] list1 = {4,2,1};

int [] list2 = {2,2, -1};

Теперь у вас есть 2 списка. В следующий раз напишите цикл, чтобы просмотреть список. Но сначала убедитесь, что оба списка имеют одинаковую длину, иначе вы получите индекс из отскока.

for(int i =0; i< list1.length; i++) 
    { 
     list3[i] = list1[i] - list2[i]; 
    } 

В любом случае, вот полный ответ. Будьте уверены, чтобы понять это

общественного класса Вычитание {

public static void main(String[] args) 
    { 
    int[] list1 = {4,2,1}; 
    int[] list2 = {2,2,-1}; 
    int[] list3 = new int[list1.length]; 

    //Looping the list 
    for(int i =0; i< list1.length; i++) 
    { 
     list3[i] = list1[i] - list2[i]; 
    } 

    //Print Statement 
    for(int j =0; j< list3.length; j++) 
    { 
     System.out.println(list3[j]); 
    } 
    } 

}

+0

Вы должны добавить проверки, чтобы убедиться, что оба списка1 и list2 имеют одинаковый размер. Но ты получил идею. –

+0

ich habe es davor schon mal so gehabt jedoch hat es mir "java.lang.NullPointerException" ausgespuckt: int [] results = null; \t \t \t \t \t \t \t \t \t \t \t для (INT I = 0; я Voodoothechild

+1

не записывайте null. Напишите что-то вроде int [] results = new int [anf.length]; –

0

Вот очень простой ответ, который вы можете применить к вашей программе.

public static void main(String[] args) { 
    int[] a = new int[4]; 
    int[] b = new int[4]; 
    int[] c = new int[4]; 

    a[0] = 5; 
    a[1] = 12; 
    a[2] = 20; 
    a[3] = 50; 
    b[0] = 1; 
    b[1] = 2; 
    b[2] = 3; 
    b[3] = 4; 

    for(int i=0; i<a.length; i++){ 
     c[i] = a[i] - b[i]; 
     System.out.println(c[i]); 
    } 
} 
1

Это можно легко сделать с помощью Стрим API:

int[] list1 = {4,2,1}; 
int[] list2 = {2,2,-1}; 

IntStream.range(0, list1.length) 
    .mapToObj(i -> list1[i] - list2[i]) 
    .collect(Collectors.toList()); 

или еще проще, используя Javaslang:

Stream.range(0, list1.length) 
    map(i -> list1[i] - list2[i]); 

или по проносясь два списка вместе:

List.ofAll(list1) 
    .zip(List.ofAll(list2)) 
    .map(t -> t._1 - t._2); 
Смежные вопросы