2015-03-27 2 views
0

Прошу прощения за (другой), по общему признанию, довольно простой вопрос, но у меня больше проблем в каком-то Java-коде, который мне нужен для класса. Назначение состоит в том, чтобы сделать сито программы Eratosthenes, и, хотя мой конструктор, похоже, работает (вызов myArray[50] из метода main дает значение, которое оно было инициализировано), оно не отражает никаких изменений, которые другие классы должны были сделать для myArray. Кроме того, print() ничего не печатает (вероятно, потому, что функция видит унифицированную версию myArray.).Array Privacy Java - Basic

Цель состоит в том, что SieveEm() и deleteStuff() отмечают все не простые числа как false, print() приходит и печатает все простые числа (помечены как true).

Я не мог найти что-либо в Интернете/StackOverflow, рассматривая проблему. Что я делаю не так?

public class Sieve { 
    private int count; 
    private boolean[] myArray; 
    public Sieve(int length){ 
     count = length+1; 
     boolean[] newArray = new boolean[length+1]; 
     if(length>=1){ 
      newArray[0]=false; 
      newArray[1]=false; 
      if(length>=2){ 
       for(int i=0;i<=length;i++){ 
        newArray[i]=true; 
       } 
      } 
     } 
     this.myArray = newArray; 
    } 
    public void SieveEm(){ 
     System.out.println("here now"); 
     System.out.println(this.myArray[50]==true); 
     for(int i=0; i<count;i++){ 
      System.out.println("We got this far"); 
      if(this.myArray[i]){ 
       deleteStuff(i); 
      } 
     } 
    } 
    public void deleteStuff(int current){ 
     int increment= current; 
     current+=increment; 
     while(current<count){ 
      this.myArray[current]=false; 
      current+=increment; 
     } 
    } 
    public void print(){ 
     this.SieveEm(); 
     for(int i=2;i<count;i++){ 
      if(this.myArray[i]){ 
       System.out.println(i); 
      } 
     } 
    } 
    public static void main(String[] args){ 
     Sieve mySieve = new Sieve(100); 
     mySieve.print(); 
     System.out.println(mySieve.myArray[50]); 
    } 
} 
+0

Можете ли вы пояснить разницу между «тем, что вы ожидаете от», «что происходит»? – Krease

+1

Как примечание стороны, но если SieveEm() - это метод, тогда вы должны запустить его в нижнем регистре. – EricF

ответ

2

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

Для public void deleteStuff(int current), этот int increment= current; current+=increment; кажется довольно избыточным и вредным, потому что increment не делает ничего особенного. Еще более важно то, что ваш while - loop никогда не закончится, потому что на первом проходе current = 0; и increment = 0;. Если вы делаете current++;, то ваш while-loop будет завершен. Кроме того, если цикл while работает и проходит через массив, все истинные значения будут установлены в false.

Onto print(). Этот метод ничего не печатает, потому что вы установите для всего myArray значение false. Конечно, из-за проблемы while-loop, о которой я упоминал ранее, for-loop для печати никогда не достигается, потому что вы застряли в бесконечном while-loop. Итак, если вы решите проблему while - loop, вы установите для каждого элемента в массиве значение false, никогда не выполняется.

if(this.myArray[i]) { System.out.println(i); }

Если я замечаю что-нибудь еще, я дам вам знать.

+0

Спасибо! Я знаю, что это должен быть только этот.myArray [50], я просто параноик и начал делать лишние вещи, чтобы быть в безопасности! – CBlumey

+0

@CBlumey Я ненавижу быть рывком или каким-либо другим словом, но первый ответ Джо Хатчинисона был совершенно совершенно неправильным и даже не ответил на ваш вопрос. Через три минуты после того, как я отвечу на ваш вопрос, он отредактировал свой ответ, и он магически содержал вопрос, который я упомянул в своем ответе. Вам не нужно выбирать мой ответ как правильный, но я прошу вас сделать то, что я дал правильный ответ на ваш вопрос перед Джо Хатчинсоном, и я не украл чей-то ответ. – Ungeheuer

+0

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