как посчитать количество элементов массива, которые лежат между двумя элементами данного массива - PullRequest
2 голосов
/ 29 января 2012

Я хочу написать метод, который при предоставлении массива целых будет делать следующее.Для каждой пары элементов массива они будут объединять их и помещать в список объектов внутреннего класса.Затем он будет сравнивать каждый элемент в массиве и проверять, будет ли он соответствовать значениям каждой пары.(т.е. у меня есть массив 0, 2, 4, он создаст, например, пару (0,4), а затем он проверит, что значение 2 действительно находится между 0 и 4, поэтому счетчик увеличится).Я попробовал следующий код, но он вернул 0. Как это исправить или есть более простой способ добиться этого?В основном я забочусь о том, чтобы возвращаемое значение было правильным.спасибо

import java.util.*;
import java.util.Map;
import java.lang.*;

public class Prac1 {
    public int count(int[] A){
        int k = 0;
        class PTemp{        
            int first = -1;
            int second = -1;
            public PTemp(int first, int second){
                int f = first;
                int s = second;             
            }           
        }
        List<PTemp> r = new ArrayList<PTemp>();
        for (int i = 0; i < A.length; i++) {
              for (int j = i+1; j < A.length; j++) {
                  r.add(new PTemp(A[i], A[j]));
                  r.add(new PTemp(A[j], A[i]));
                  //System.out.println("["+A[i] +","+A[j]+"]");
                  //System.out.println("["+A[j] +","+A[i]+"]");
              }
            }
        Iterator<PTemp> ir = r.iterator();
        while (ir.hasNext()){
            PTemp p = ir.next();
            for (int i = 0; i < A.length; i++){
                if (((p.first < A[i]) && (A[i] < p.second)) || ((p.first > A[i]) && (A[i] > p.second))){
                    k = k + 1;
                }
            }       
        }               
        return k;
    }
    public static void main(String[] args){
        int[] A = {0, 2, 4};
        Prac1 pr = new Prac1();
        System.out.println(pr.count(A));
    }
}

Ответы [ 3 ]

4 голосов
/ 29 января 2012

Найдена вторая ошибка в дополнение к упомянутой Алексеем D:

class PTemp{        
        int first = -1;
        int second = -1;
        public PTemp(int first, int second){
            int f = first;
            int s = second;             
        }           
    }

действительно должно быть:

class PTemp{        
        int first = -1;
        int second = -1;
        public PTemp(int first, int second){
            this.first = first;
            this.second = second;             
        }           
    }

Теперь поля установлены правильно.

2 голосов
/ 29 января 2012

Проблема здесь:

 class PTemp
 {        
    int first = -1;
    int second = -1;
    public PTemp(int first, int second)
    {
       int f = first; //error
       int s = second; //error      
    }           
 }

В строках, где я отметил ошибку, вы устанавливаете int f и int s равными first и second, проблема в том, чтоатрибуты для вашего класса PTemp называются first и second, а не f и s.

Перейдите к этому и повторите попытку:

     class PTemp
     {        
        int first = -1;
        int second = -1;

        public PTemp(int first, int second)
        {
           this.first = first;
           this.second = second;             
        }           
     }
2 голосов
/ 29 января 2012

Я только что увидел ошибку.Это:

r.add(new PTemp(i, j));
r.add(new PTemp(j, i));

должно быть:

r.add(new PTemp(A[i], A[j]));
r.add(new PTemp(A[j], A[i]));

РЕДАКТИРОВАТЬ: похоже, другие плакаты обнаружили еще одну ошибку.Я рад, что ваш код работает сейчас, но, пожалуйста, обратите внимание, что он будет очень, очень медленным, если вы будете использовать его в очень большом массиве.Я опубликовал способ сделать это быстро, даже на огромных массивах, в качестве ответа на ваш другой связанный вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...