2014-01-22 2 views
1
package homework1; 
//author Kyle Fields 


public class HomeWork1{ 


public static void main(String[] args) { 

int [ ] input = { 100, 37, 49 }; 

boolean result1 = contains(input, new Prime()); 
boolean result2 = contains(input, new PerfectSquare()); 
boolean result3 = contains(input, new Negative()); 
System.out.println(result1); 
System.out.println(result2); 
System.out.println(result3); 

} 



static boolean contains(int[] array, Condition condition) { 
    return (condition(array)); 

}Написание содержит метод в Java

} 



package homework1; 

/** 
* 
* @author Kyle Fields 
*/ 
public interface Condition { 

    boolean makeYourCondition(int[] input); 

} 


package homework1; 

/** 
* 
* @author Kyle Fields 
*/ 
public class Prime implements Condition { 


@Override 
public boolean makeYourCondition(int[] input) { 
     for (int n : input) { 
     if (n >= 2) {    
     if (n == 2) { 
      return true; 
     } 
     for (int i = 2; i <= Math.sqrt(n) + 1; i++) { 
      if (!(n % i == 0)) { 
       return true; 
      } 
     } 
} 
} 
return false; 
} 

    } 

другие классы ниже

package homework1; 

/** 
* 
* @author Kyle Fields 
*/ 
public class PerfectSquare implements Condition { 

@Override 
public boolean makeYourCondition(int[] input) { 

    for (int i : input) { 
//takes the square root 
long SquareRoot = (long) Math.sqrt(i); 
//multiplys the sqrt by the sqrt to see if it equals the original 
if (((SquareRoot * SquareRoot) == i) == true){ 
return true; 
} 

    } 
return false; 

    } 
} 



package homework1; 

/** 
* 
* @author Kyle Fields 
*/ 
public class Negative implements Condition { 


boolean Negative(int n){ 
if (n <= -1){ 
return true; 
} 
return false; 
} 

@Override 
public boolean makeYourCondition(int[] input) { 

    for (int i : input) { 
     if(i<0) return true; 
    } 

     return false; 
    } 

} 

мой вопрос заключается в следующем, как я закончу этот код? Значение: что мне нужно сделать для моего метода? (в настоящее время он говорит мне, что условие метода (int []) не является допустимым методом в классе homework1.)

+4

В вопросе эти методы не являются классами. Вот почему ваш учитель поместил их в «PascalCase». Предполагается, что вы выполняете инверсию шаблонов управления, а не методов hardcoding. Для представления о том, как это должно выглядеть, взгляните на [Guadi Predicate] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Predicate.html) и как он взаимодействует со своими [Утилитами коллекций] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Iterables.html). –

+4

Вы должны снова прочитать упражнение: вам необходимо создать класс 'Prime', а не метод' Prime() '. Все эти классы должны реализовывать общий интерфейс, например. 'Test', который определяет метод проверки того, соответствует ли данный int (или в упражнении 2, любой тип) тесту класса, например. для 'Prime' он проверяет, является ли число простым. – Njol

+0

Вы не можете использовать 'new' с помощью метода. На самом деле, «Прайм» и другие должны быть классами! –

ответ

-4

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

public class HomeWork { 
    public static void main(String[] args) { 

     int[] arr=new int[] {100, 37, 49}; 

     Condition[] conditions= new Condition[]{ 
               new Negative(), 
               new Prime(), 
               new PerfectSquare() 
              }; 

     for (Condition condition : conditions) { 
      System.out.println(condition.makeYourCondition(arr)); 
     } 
    } 
} 

interface Condition { 
    boolean makeYourCondition(int[] input); 
} 

class Negative implements Condition { 

    @Override 
    public boolean makeYourCondition(int[] input) { 

     for (int i : input) { 
      if(i<0) return true; 
     } 

     return false; 
    } 

} 

class Prime implements Condition { 

    @Override 
    public boolean makeYourCondition(int[] input) { 

     //TODO PUT YOUR CONDITION 

     return false; 
    } 

} 

class PerfectSquare implements Condition { 

    @Override 
    public boolean makeYourCondition(int[] input) { 

     //TODO PUT YOUR CONDITION 

     return false; 
    } 

} 
+2

У вас есть дублирование кода - это не то, что было предназначено. Я уверен. «Предикат» должен просто проверять _single_ 'int' - тогда метод' contains' должен выполнять цикл. В любом случае ложка, подающая ответ на вопрос о домашнем задании, нахмурилась, поскольку ОП не узнает. –

+0

Мое намерение не было делать домашнее задание, но показать другой способ сделать это. –

1

фиктивный код в порядке, если вы знаете, что делаете. Сначала метод contains() принимает массив и условие и возвращает логическое значение. Напишем подпись

boolean contains(int[] array, Condition condition) 

Prime, PerfectSquare и Negative будет реализации условия, т.е.

interface Condition { 
... 
} 

class Prime implements Condition { 
... 
} 

class PerfectSquare ... 

Установка упражнение намеков, что в реализациях условия вы должны проверить, является ли INT значения аргумента удовлетворяет конкретному случаю; метод contains() выполняет итерацию через массив и возвращает, если он встречает «истинный» или «ложный», если исчерпает список.

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