2012-01-05 2 views
0

Итак, мой код сделан, но теперь мне нужно его распечатать, если выбранные числа равны или нет!Распознавание образов

Я сделал цикл для FALSE/NUMBERS EQUAL, но он работает неправильно. Надеюсь, вы сможете помочь. Мой код выглядит следующим образом:

package patternrecognition; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.TreeMap; 

public class PatternRecognition { 

    public static void main(String[] args) throws Exception { 



     BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 


     int AntalNumre = -1; 

     boolean Gyldignummer = false; 
     while (Gyldignummer == false) { 
      System.out.print("\n\nIndtast antal numre: "); 

      String numre = reader.readLine().trim(); 

      Gyldignummer = validInteger(numre); 

      if (Gyldignummer == false) { 
       System.out.println("Indtast et gyldigt nummer"); 
      } else { 

       AntalNumre = Integer.parseInt(numre); 
      } 

     } 


     HashMap vaerdier = new HashMap(); 

     for (int i = 0; i < AntalNumre; i++) { //Studerendes nummer(i+1) 

      boolean GyldigNummer2 = false; 

      while (GyldigNummer2 == false) { 
       System.out.print("\n\nIndtast en vaerdi for nummer " + (i + 1) + ": "); 

       String vaerdi = reader.readLine().trim(); 
       int vaerdien = -1; 

       GyldigNummer2 = validInteger(vaerdi); 
       if (GyldigNummer2 == false) { 
        System.out.println("Indtast et gyldigt nummer"); 
       } else { 

        vaerdien = Integer.parseInt(vaerdi); 
       } 
       vaerdier.put(vaerdi, new Integer(vaerdien)); 
      } 
     } 



     TreeMap SorteretNummer = new TreeMap(vaerdier); 

     Iterator nr = SorteretNummer.keySet().iterator(); 

     System.out.println("\n\n\n\n\n"); 
     System.out.println("Numre valgt:"); 
     System.out.println("------------"); 


     while (nr.hasNext()) { 

      String navn = (String) nr.next(); 


      int numre = ((Integer) SorteretNummer.get(navn)).intValue(); 

      System.out.println("" + numre); 

      if (numre != numre) { 
       System.out.println("FALSE"); 
      } 
      else { 
       System.out.println("ALLE THE NUMBERS ARE EQUAL"); 
      } 

     } 
    } 

    public static boolean validInteger(String nummer) { 
     boolean validInteger = false; 


     try { 
      Integer.parseInt(nummer); 
      validInteger = true; 
     } catch (NumberFormatException nfe) { 
      validInteger = false; 
     } 
     return validInteger; 

    } 
} 
+0

Так что же проблема? http://catb.org/~esr/faqs/smart-questions.html Или я должен сказать: Så hvad der synes at være et problem? – alf

+0

Извините, если я не проясню. Как вы можете видеть в botton кода, перед «validInteger» я сделал «if (numre! = Numre») {print false} else {все числа ...}. Но он не проверяет все числа. Он просто печатает 1 номер, затем печатает «ВСЕ НОМЕРА ...», затем номер 2, затем «ВСЕ НОМЕРА И ..» и т. Д. Я не знаю, как заставить его проверять номера, которые вы можете ввести. – Daniel

+0

«но это не работает правильно» мне не кажется ясным. Было бы намного проще, если бы вы описали, что именно идет не так. Комментарии на датском языке слегка раздражают, поскольку они имеют место и не помогают, но отсутствие описания проблемы убивает вопрос. – alf

ответ

1

Ну, numre != numre обязательно будет false если, конечно, не происходит быть изменен в другом потоке (или быть NaN, но это другая история).

Возможно, вы можете сравнить пары чисел? Или, возможно, вы хотите, чтобы структура данных содержала номера, которые вы уже видели (например, HashSet или BitSet)?

Пример: поскольку пользователь вводит числа, сохраните их до . Как только он закончит, добавьте

Set<Integer> set = new hashSet<Integer>(); 

// ...as we're getting numbers from user 

    set.add(numre); 

// ... 

if (set.size() == 1) 
    System.out.println("OMG they're all the same! " + set); 
+0

Вы чертовски правы, это моя домашняя работа :) Но на самом деле мы еще не узнали о TreeMap, HashMap, BufferedReader og HashSet, прочитайте об этом в моей книге и попробуйте! Поэтому я прошу о помощи, например. код и т. д. ^^ Итак, я не совсем уверен, как сделать HashSet , не могли бы вы привести пример, пожалуйста? :) – Daniel

+0

@ Даниэль веселиться. – alf

+0

это работает. Большое спасибо! :) – Daniel

1

Это проблема:

if (numre != numre) { 
    System.out.println("FALSE"); 
} 
else { 
    System.out.println("ALLE THE NUMBERS ARE EQUAL"); 
} 

Сравнивая ту же переменную к себе: всегда будет печатать «ALLE ЧИСЛА РАВНЫ».

EDIT:

Помните ранее введенный Integer и сравнить наиболее недавно вошли Integer. Используйте Integer и инициализируйте previousInt до null, чтобы вы знали, чтобы избежать сравнения на начальной итерации цикла. Поскольку это домашнее задание, я не буду публиковать код, и это принесет вам больше пользы, если вы его закодируете сами.

+0

Да, я подумал об этом. Но это число, которое печатается, поэтому я не знаю, как сравнить все числа? Выбираемый номер помещается в «numre» и печатается. Это не похоже на то, что у меня есть массив, чтобы сохранить числа и сравнить их. Есть идеи? :) – Daniel

+0

@ Daniel Ну, errr, получите * массив, чтобы сохранить числа и сравнить их * возможно? :) – alf

+0

Создайте 'ArrayList ', чтобы сохранить их. Если вам нужно сравнить каждый «Integer» с любым другим «Integer» в списке, тогда вы можете использовать вложенные циклы 'for', не забывая сравнивать одно и то же« Integer ». – hmjd

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