webForumDet fria alternativet

Räkna heltal i Java

Java

11 svar · 2 458 visningar · startad av rikard81

Medlem sedan mars 2007311 inlägg
Frågan#1

Håller på att lära mig detta med att räkna upp antal angivna tal i Java. Dvs att du anger ett antal tal under 50 och sedan summeras det ut på skärmen hur många tal under 50 du angett. Har kodat ihop ett stycke men räknaren funkar inte. Varför vet jag inte? Den borde väl räkna rätt, eller vart ligger felet?

import javax.swing.*;

  public class mag {
    public static void main (String[] arg) {        

    String indata;     
    int heltal=0;        
    int underFemtio=0;       

    while (heltal >= 0) {                
    indata = JOptionPane.showInputDialog ("Uppge ett tal under 50.");            
    heltal = Integer.parseInt(indata);
    }

    if (heltal < 50 && heltal > 0) { 
        underFemtio++;            
    }

 JOptionPane.showMessageDialog (null, "Tal under 50: " + underFemtio);

System.exit(0);  

}

}
Medlem sedan maj 20011 826 inlägg
#2

Du kör din if-sats som ska räkna tal, efter hela while-loopen är klar. Du måste lägga in if-satsen i while-loopen för att den ska köras en gång för varje inmatning.

Medlem sedan mars 2007311 inlägg
#3

Aha. Mycket tacksam för svaret.

Medlem sedan mars 2007311 inlägg
#4

rikard81 skrev:

Håller på att lära mig detta med att räkna upp antal angivna tal i Java. Dvs att du anger ett antal tal under 50 och sedan summeras det ut på skärmen hur många tal under 50 du angett. Har kodat ihop ett stycke men räknaren funkar inte. Varför vet jag inte? Den borde väl räkna rätt, eller vart ligger felet?

import javax.swing.*;

  public class mag {
    public static void main (String[] arg) {        

    String indata;     
    int heltal=0;        
    int underFemtio=0;       

    while (heltal >= 0) {                
    indata = JOptionPane.showInputDialog ("Uppge ett tal under 50.");            
    heltal = Integer.parseInt(indata);
    }

    if (heltal < 50 && heltal > 0) { 
        underFemtio++;            
    }

 JOptionPane.showMessageDialog (null, "Tal under 50: " + underFemtio);

System.exit(0);  

}

}

Jag citerar mitt eget inlägg här. Om jag vill räkna ut antal tal under 50. Varför måste jag skriva:

if (heltal < 50 && heltal > 0)

?. Varför funkar det inte att skriva enbart:

if (heltal < 50)

?

Medlem sedan feb. 20005 891 inlägg
#5

Anledningen är att du använder heltals-variabeln som "kontroll".

För att avsluta loopen måste man ju mata in ett värde under 0, t.ex -1, och eftersom if-satsen bara kontrollerar att heltal är MINDRE ÄN 50, så räknas även negativa inmatade värden.

Medlem sedan mars 2007311 inlägg
#6

Aha, Det är ju klart. Det borde man ju kunnat räkna ut själv. Cheers.

Medlem sedan mars 2007311 inlägg
#7

Lyfter en gammal tråd och går lite offtopic. Har skapat ett program som räknar ut antal angivna tal, som ovan. Kort sagt, man matar in ett antal heltal där programmet sedan räknar ut antalet angivna tal. Nu vill jag att programmet ska räkna ut högsta angivna tal. Har provat med MAX_VALUE men får det inte att funka. Använder mig av int (heltal) men får en massa decimaler ändå? Får inte rätt högsta angivna tal. Väldigt dåligt med info på nätet om detta. Har försökt skapa en variabel av MAX.

import javax.swing.*;

  public class skriva {
    public static void main (String[] arg) {        

    String indata;     
    int heltal=0;        
    int angivet=0;       
    int max=0;

    while (heltal >= 0) {                
    indata = JOptionPane.showInputDialog ("Mata in ett heltal");            
    heltal = Integer.parseInt(indata);
    
      if (heltal  >= 0)  
        angivet++;  

        max= Integer.MAX_VALUE; 
        int svar=max;
 }
 JOptionPane.showMessageDialog (null, "angivna tal" + angivet);
 JOptionPane.showMessageDialog (null, "angivna tal" + max);

System.exit(0);  

}
}
Medlem sedan maj 20011 826 inlägg
#8

När du har en ny fråga är det bättre att du skapar en ny tråd.

Medlem sedan feb. 20005 891 inlägg
#9

rikard81 skrev:

Lyfter en gammal tråd och går lite offtopic. Har skapat ett program som räknar ut antal angivna tal, som ovan. Kort sagt, man matar in ett antal heltal där programmet sedan räknar ut antalet angivna tal. Nu vill jag att programmet ska räkna ut högsta angivna tal. Har provat med MAX_VALUE men får det inte att funka. Använder mig av int (heltal) men får en massa decimaler ändå? Får inte rätt högsta angivna tal. Väldigt dåligt med info på nätet om detta. Har försökt skapa en variabel av MAX.

Har du kollat dokumentationen? MAX_VALUE i wrapperklassen ger dig största möjliga värde som går att peta in i en integer - inte största värdet i en samling.

Men vet du vad som saknas? Du lägger ju alla tal på hög, så hur ska programmet kunna hålla reda på alla individuella tal sen efter exekvering? Rimligtvis bör du kika på en lämplig "behållare" istället, om du vill kunna få fram största talet.

En array är kanske lämplig att börja med? (Antar att du läser nån kurs i Java?)

Lästips:
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html
http://download.oracle.com/javase/1.5.0/docs/api/java/util/Arrays.html

Medlem sedan mars 2007311 inlägg
#10

Kanon. Ska kika på dessa dokumentationer. Nej jag läser ingen kurs i java. Försöker lära mig på egen hand, då jag är intresserad. har skaffat mig boken Java direkt, men den tar inte upp MAX_VALUE mer än på ytan. Lämplig behållare? Menar du exempel en separat if? Så du menar att jag ska skippa max_value?

Medlem sedan feb. 20005 891 inlägg
#11

rikard81 skrev:

Kanon. Ska kika på dessa dokumentationer. Nej jag läser ingen kurs i java. Försöker lära mig på egen hand, då jag är intresserad. har skaffat mig boken Java direkt, men den tar inte upp MAX_VALUE mer än på ytan. Lämplig behållare? Menar du exempel en separat if?

Nej, jag menar ett objekt som är byggd för att hålla flera värden - t.ex en Array eller ArrayList (bättre än Array, men lite mer "överkurs" nu kanske).

Läs kapitel 3.8 i Java Direkt - Skansholm kallar arrays "fält". Ibland kallas de också "vektorer", men det är samma sak och ett måste att lära sig!

Medlem sedan mars 2007311 inlägg
#12

Okey. Tack. Ska kika på detta så får vi se som man blir lite klokare :-)

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)