Just nu i M3-nätverket
Jump to content

Varför funkar inte min if-sats?


Daniel Wahlgren

Recommended Posts

Daniel Wahlgren

Jag sitter som extrem nybörjare och försöker knopa ihop ett litet testprogram i java.

 

Syftet med programmet är att ta en textsträng och presentera alla orden i en lista samt hur många gånger ordet förekommer:

 

Kommando:

java text hej alla balla människor med alla balla husdjur

 

Resultat:

alla:2

balla:2

hej:1

husdjur:1

med:1

människor:1

 

Koden jag har skrivit ser hittils ut så här:

public class text{

  public static void main(String[] args){
    java.util.Arrays.sort(args);
    int i = -1;
    String temp = "";
    String[][] result = new String[args.length][2];
    for(int j = 0; j < args.length; j++){
      /System.out.println("\"" + args[j] + "\" : \"" + temp + "\"");
      if(args[j] == temp){
      }
      else {
        i++;
        result[i][0] = args[j];
        result[i][1] = "1";
        temp = args[j];
      }
    }
    for(int j = 0; j < result.length; j++){
      System.out.println((j+1) + ":" + result[j][0] + ":" + result[j][1]);
    }
  }
}

Jag är alltså ej ute efter en färdig lösning på mitt problem. Jag vill bara veta varför min if-sats aldrig returnerar true fast det bevisligen finns två ord i rad som är exakt likadana.

 

Sedan har jag en liten tilläggsfråga: Kan man i en 2dimensionell array ha både String och int? hur deklarerar man den isåfall?

 

Jag vet att jag saknar en del kod (Den som ändrar räknaren) men jag vill bli klar med detta steg först innan jag fortsätter.

 

Tack på förhand!

 

[inlägget ändrat 2002-10-16 23:23:36 av Daniel Wahlgren]

Link to comment
Share on other sites

-Patrik Johansson-

Tänk på att en sträng är ett objekt och jämför man två strängar med == kollar man bara om de är referenser till samma objekt.

Det är därför din ifsats inte ger true eftersom de inte refererar till samma objekt.

 

Istället skall man använda equals.

Så vill du jämföra innehållet i strängen a med innehållet i strängen b

skriver man

a.equals(

som alltså returnerar en boolean.

Om du vill ignonera stora och små bokstäver kan du istället använda equalsIgnoreCase() på samma sätt.

 

Det är inget som behöver importeras då dessa metoder finns i klassen String som finns i java.lang som automatiskt "importeras".

 

 

När det gäller den två 2D-arrayen så är jag osäker men du kan ju lagra alla värden som strängar och sedan om talen av arrayen skall behandlas använder du Interger.parseInt(x) där x är strängen som skall "omvandlas" till ett tal.

 

/Neox -(Patrik J)

”Gravitation can not be held responsible for people falling in love”
- citat av Albert Einstein

 

 

 

[inlägget ändrat 2002-10-16 23:58:35 av Patrik J Johansson]

Link to comment
Share on other sites

Patrik har redan svarat exemplariskt på din fösta fråga så jag struntar i den...

 

Sedan har jag en liten tilläggsfråga: Kan man i en 2dimensionell array ha både String och int? hur deklarerar man den isåfall?

 

Både String och Integer (obs, inte "int") är derivat av Object, enklast är nog att göra en array av Objects och kasta in det du vill.

 

 

[inlägget ändrat 2002-10-17 00:11:00 av fhe]

Link to comment
Share on other sites

Daniel Wahlgren

Exemplariskt svar! Ett av de bässta på eforum :)

 

Som tack har då fått ett poäng, samt ni får hela min lösning på problemet (Även om ni antagligen inte tycker det är revolutionerande ;)

 

public class text{

 public static void main(String[] args){

   //Sortera ordarrayen
   java.util.Arrays.sort(args);

   //Pekare för resultatarrayen.
   //Börjar på -1 då den först ökas till 0 innan den används i resultatarrayen.
   int i = -1;

   //Initiera resultatarrayen med en maxstorlek på antalet ord i ordarrayen samt 2 kolumner
   String[][] result = new String[args.length][2];

   //Vi skapar variabeln temp för att tillfälligt hålla reda på vilket senaste ordet var.
   //Anledningen till detta är för att kontrollen i if-satsen nedan inte fungerar om man
   //jämför direkt mot resultatarrayen då den börjar på -1.
   String temp = "";

   //Tilldelning av värden till resultatarrayen
   for(int j = 0; j < args.length; j++){
     //Kontrollerar om ordet redan finns i listan och reagerar därefter. Då alla
     //ord är sorterade räcker det med att titta på befintligt ord samt nytt ord
     //Kontrollen gör skillnad på stora och små bokstäver, dvs Hem != hem
     if(args[j].equals(temp)){
       //Om ordet redan finns i listan skall antalet ökas med 1. Detta gör vi genom att
       //omvandla det nuvarande värdet till en integer, öka med ett samt återställa till en string.
       result[i][1] = Integer.toString(Integer.valueOf(result[i][1]).intValue()+1);
     }
     else {
       //Om ordet inte finns sedan tidigare går vi till nästa element i resultatarrayen
       //och lägger där in ordet samt sätter räknaren till 1
       i++;
       result[i][0] = args[j];
       result[i][1] = "1";
       temp = result[i][0];
     }
   }
   //Utskrift av resultatarrayen
   for(int j = 0; j < result.length; j++){
     //Vi kontrollerar om utskrivten kommer skriva ut null, varvid vi helt enkelt inte skriver ut.
     if(result[j][0] != null){
       System.out.println((j+1) + ":" + result[j][0] + ":" + result[j][1]);
     }
   }
 }
}

 

**********

Om spelvåld påverkar unga, hur skulle pakmangenerationen se ut idag?

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...