2013-12-07 4 views
0

Много раз я запускаю это, существует бесконечная проблема цикла, но я просто не могу узнать, что/где она. В других случаях он работает нормально. Во время бесконечной ошибки запуска программа даже не запускает начальную часть, где я говорю программе для отображения arrayList. У меня есть массивList, называемый dailyPlanetStreet, заполненный объектами любого класса Goodguy Badguy Person или NormalGuy. В моем снятом механизме ниже, если на одной стороне плохого парня есть нормальный парень/человек, я удаляю этого человека/normalguy. Если на обеих сторонах есть нормальный игрок/человек, я случайно удаляю один из них. Кроме того, каждый раз, когда я удаляю его, я беспорядочно перемещаю другого человека/нормального парня с ежедневной планеты на другого аррайалиста, называемого безопасным землей.Ошибка с бесконечным циклом

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

8 
8 
8 
8 
8 
8 

Пожалуйста, помогите мне найти проблему

import java.util.ArrayList; 
public class GothamLikeAdventureTown 
{ 
    static int y=5; 
    static int x=3; 

    static ArrayList<Person> dailyPlanetStreet=new ArrayList<Person>(); 
    static ArrayList<Person> safetyLand=new ArrayList<Person>(); 
    static ArrayList<Person> unfortunatelyFatallyWoundedPeople=new ArrayList<Person>(); 

    public static void rescue() { 
     int goodpos=0; 
     int randompos=(int)(Math.random()*dailyPlanetStreet.size()); 
     for (int counter1=0; counter1<dailyPlanetStreet.size(); counter1++){ 
      if (dailyPlanetStreet.get(counter1).name()!="Kent Clark") {goodpos=counter1; } 
     } 
     dailyPlanetStreet.add(randompos,dailyPlanetStreet.remove(goodpos)); 

    } 



    public static void tosafety() { 
     System.out.println("Got here!"); 
     int outer=12; 
     while (outer!=12){ 
     int randompos=(int)(Math.random()*dailyPlanetStreet.size()); 
     if ((dailyPlanetStreet.get(randompos).name()!="Clark Kent") && (dailyPlanetStreet.get(randompos).name()!="James Kalvin")) 
     { 
      System.out.println("Got into the loop!"); 
      safetyLand.add(dailyPlanetStreet.remove(randompos)); 
      outer=12; 
     } } 
    } 
    public static void remove(int deletepos) { 
     unfortunatelyFatallyWoundedPeople.add(dailyPlanetStreet.remove(deletepos)); 
    } 

    public static void display(){ 
     System.out.println(); 
     System.out.println(); 
     for (int z=0; z<dailyPlanetStreet.size(); z++) 
     { 
      if (dailyPlanetStreet.get(z) instanceof BadGuy) System.out.println("badguy"); 
      else if (dailyPlanetStreet.get(z) instanceof GoodGuy) System.out.println("goodguy"); 
      else if (dailyPlanetStreet.get(z) instanceof NormalGuy) System.out.println("normal guy"); 
      else if (dailyPlanetStreet.get(z) instanceof Person) System.out.println("person"); 
     } 
    } 

    public static void main(String args[]) 
     { 
     String[] firstname= {"a ", "b", "c", "d","e","f","g","h","i","j"}; 
     String[] lastname= {"k ", "l", "m", "n","o","p","q","r","s","t"}; 
     while (y==x){ 
      y=(int)(Math.random()*10); 
      x=(int)(Math.random()*10); 

     } 



     for (int z=0; z<10; z++) 
     { 
      if (z==y) 
       { 
        GoodGuy superMan=new GoodGuy("This looks like a job for superman!" , "A lot of them" , true , 10 , "Superman" , "Clark Kent" , "plumber" , 100 , 10,10); 
        dailyPlanetStreet.add(superMan);     } 

      else if (z==x) 
       { 
        BadGuy superMan=new BadGuy("haha" , "Darkness" , true , 10 , "Batman" , "James Kalvin" , "farmer" , 100 , 10,10); 
        dailyPlanetStreet.add(superMan); 
                   } 
      else if (((int)(Math.random()*2)+1)==1) 
       { 
        Person superMan=new Person(firstname[(int)(Math.random()*10)]+lastname[(int)(Math.random()*10)], "teacher", 100 , 10,10); 
        dailyPlanetStreet.add(superMan); 
       } 
      else 
       { 
        NormalGuy superMan=new NormalGuy(firstname[(int)(Math.random()*10)]+lastname[(int)(Math.random()*10)], "teacher", 100 , 10,10); 
        dailyPlanetStreet.add(superMan); 
       } 
     } 

     display(); 


     while (dailyPlanetStreet.size()>2){ 
     for (int counter=0; counter<dailyPlanetStreet.size(); counter++){ 
      if (dailyPlanetStreet.get(counter).name()=="James Kalvin") 
      { 
       if ((counter==0) && (dailyPlanetStreet.get(1).name()=="Clark Kent")) {} 
       else if ((counter==0) && (dailyPlanetStreet.get(1).name()!="Clark Kent")) {System.out.println("yo"); remove(counter+1);display();rescue();} 
       else if ((counter==dailyPlanetStreet.size()-1) && (dailyPlanetStreet.get(dailyPlanetStreet.size()-2).name()=="Clark Kent")) {System.out.println("yo"); tosafety();rescue();display();} 
       else if ((counter==dailyPlanetStreet.size()-1) && (dailyPlanetStreet.get(dailyPlanetStreet.size()-2).name()!="Clark Kent")) {System.out.println("yo");remove(counter-1);tosafety();rescue();display();} 
       else if (dailyPlanetStreet.get(counter+1).name()=="Clark Kent") {System.out.println("yo");remove(counter-1);tosafety();rescue();display();} 
       else if (dailyPlanetStreet.get(counter-1).name()=="Clark Kent") {System.out.println("yo");remove(counter+1); tosafety();rescue();display();} 
       else if ((dailyPlanetStreet.get(counter-1).name()!="Clark Kent")&& (dailyPlanetStreet.get(counter+1).name()!="Clark Kent")) 
       { 
        if (((int)(Math.random()*2))==1) {System.out.println("yo");remove(counter+1); tosafety();rescue();display();} 
        else {System.out.println("yo");remove(counter-1); tosafety();rescue();display();} 
       } 

       } 
      } 
     System.out.println(dailyPlanetStreet.size()); 
     } 


     System.out.println("hi"); 

     } 

} 
+2

[как сравнить 'String' в Java] (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – zapl

+0

Это не дубликат! OP было предложено задать другой вопрос, потому что тема изменилась. Пожалуйста, внимательно прочитайте, когда поставили под сомнение вопрос: -/ – Octoshape

ответ

0

Вы сравнить String с == вместо .equals, это общая ошибка и не работает.

Например, в ваше время цикла:

if (dailyPlanetStreet.get(counter).name()=="James Kalvin") 

должен быть изменен на:

if (dailyPlanetStreet.get(counter).name().equals("James Kalvin")) 

, а также все другие случаи, когда вы сравните строки.

EDIT

О задаче с бесконечным циклом:

Ваш цикл, пока работает, пока .size() не меньше 2. Но в цикле, пока вы только что-то делать, если один из .name() значений dailyPlanetStreet является "James Kalvin". Из того, что я вижу, эти значения генерируются/выбираются случайным образом. Поэтому, если вам не удастся заполучить Джеймса Калвина, вы будете там навсегда.

Чтобы быть в состоянии сказать о том, почему именно он зацикливается я бы видеть конструктор BadGuy, который вы используете ..

EDIT 2

Посмотрев на комментарии ниже , Я вижу, что все предложения if else if в цикле while начинаются с условия, которое сравнивает String с ==. Поэтому никто из них не вернется, и ничего не будет сделано. Пожалуйста, измените все ваши ....name()=="Something" на ....name().equals("Something").

+0

Мне сказали в автономном режиме OP, что эти две строки гарантируют, что вы получите Джеймса Калвина: BadGuy superMan = новый BadGuy («ха-ха», «Тьма», true, 10, Бэтмен "," Джеймс Калвин "," Фермер ", 100, 10,10); dailyPlanetStreet.add (superMan); –

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