2013-02-05, 19:29
  #1
Medlem
Tjena har fastnat på två uppgifter(eller snarare två uppgifter i en stor meny till uppgift). Kunskaperna från A-kursen kärvar plus att jag läste C++ då.

Programmet frågar först efter ett valfritt ord att skriva in, sen kommer en meny upp där man får välja mellan sju alternativ, sjunde alternativet avslutar programmet, alternativ 5,6 får jag inte till. Case-satser används när man tryckt in sitt val(1,2,3,4,5,6 eller 7) som då levererar en utskrift eller ännu en inskrift.
Case 5 ska jag få att skriva ut antalet av en speciell bokstav i, t.ex. om order jag skrivit in är 'Snow' så ska programmet fråga "Vilken bokstav vill du kontrollera?" matar jag in S t.ex. så skriver den ut att det finns 1 S i ordet. Utskrifterna är simpelt men själva logiken kommer jag inte på...
Case 6 frågar programmet om man vill byta ut en bokstav mot en annan och sen skriver ut resultatet.

Något jag stör mig på i Java är att just utskrifterna, i C++ använde jag cout och cin, i java får man skriva en hel jävla rad bara för att kunna få en utskrift. Aja tacksam för svar.

obs: Vet inte om det finns flera olika miljöer i Java men vi använder oss av JOptionPane-typen när det gäller utskrift och inskrift. Vill minnas att det finns några andra funktioner som hanterar detta.
Citera
2013-02-05, 19:44
  #2
Medlem
JohnLocke2s avatar
//count by lowlevel coding
public static int countOccurrences(String s, char c)
{
int count = 0;
for (int i=0; i < s.length(); i++)
{
if (s.charAt(i) == c)
{
count++;
}
}
return count;
}

//Replace by using string class methods
char c = ´d´;
char r = ´f´;
String result = yourString.replace(c,r);

Jag har inte kompilerat men det bör fungera ...
Citera
2013-02-06, 10:12
  #3
Medlem
Citat:
Ursprungligen postat av JohnLocke2
//count by lowlevel coding
public static int countOccurrences(String s, char c)
{
int count = 0;
for (int i=0; i < s.length(); i++)
{
if (s.charAt(i) == c)
{
count++;
}
}
return count;
}

//Replace by using string class methods
char c = ´d´;
char r = ´f´;
String result = yourString.replace(c,r);

Jag har inte kompilerat men det bör fungera ...

Tack! Men i Case 5 där jag jämför det tecken jag vill kolla i strängen så får jag fel. Jag försöker att deklarera en char-variabel att ta emot inmatningen av t.ex. tecknet "a" som sen ska jämföras med strängen(ordet) mha charAt som du skrev. Det går om jag använder String att ta emot tecknet, men då jämför jag ju en char och en String och får kompileringsfel. Alltså hur:

Kod:
char bokstav = JOptionPane.showInputDialog(null, "Vilken bokstav vill du kontrollera?");
               int count = 0;
                  for (int i=0; i < ord.length(); i++)
                     {
                        if (ord.charAt(i) == bokstav)
                           {
                              count++;
                     }
                           }

Den stöter på problem vid char bokstav = JOptionPane.showInputDialog(null, "Vilken bokstav vill du kontrollera?");

Jag har testat att ändra och ta bort strängen eller lägga till variabeln mellan parenteserna men inget funkar. Hatar Java!
Citera
2013-02-06, 11:23
  #4
Medlem
kelebs avatar
Metoder för att hjälpa dig att lösa de två casen finns i klassen String. För case fem rekommenderar jag dig att först titta på metoden contains. Den ger dig svar om en speciell bokstav (eller CharSequence egentligen, men den kan ju vara en bokstav). Om det nu är så att contains ger true så finns det minst ett s i ordet och du måste komma på ett sätt att räkna dem. Ett alternativ är att på ett eller annat sätt iterera genom strängen (som visats av andra eller genom att göra om till en array av char och gå igenom den).

Ett annat alternativ är att använda sig av metoden split. Är är det viktigt att använda den versionen av split som tar två argument och att du ger Integer.MAX_VALUE som andra argument för att metoden ska kunna lösa ut avslutande bokstäver. Resultatet blir en array av strängar där varje sträng är en del av det ursprungliga ordet avdelat vid den bokstav du nämnde. Handlar det till exempel om ordet bytesrätt och bokstaven t kommer split att ge dig en array med följande delar: "by" "esrä" "" "". Alltså två tomma strängar på slutet (vilket är skillnaden mellan denna version och den andra versionen av split som inte ger det reslutatet). Du har tre t och delar på tre ställen och får fyra delar. Alltså, antalet t i ordet är ett mindre än antalet delar som split ger.

Kod:
if(inputWord.contains(inputLetter)){
     
String[] splitWord inputWord.split(inputLetterInteger.MAX_VALUE);
     
System.out.println("Det finns " (+ splitWord.length 1) + " " inputLetter " i ordet " inputWord);
} else {
     
System.out.println("Nepp, inget där!");


Vad gäller case 6 kan du använda dig av metoden replace precis som JohnLocke2 skrev och inte behöva gör något mer avancerat.


Vad gäller att göra om från String till char så går det inte rakt av. Och det du läser in kommer att vara en sträng det kan du inte förändra genom att deklarerar en annan datatyp. Men i den sträng du läst in är det ju bara det första tecknet du vill åt. Alltså kommer du åt det via chatAt(0) på bokstavs-strängen.
Kod:
String input JOptionPane//etc
char countChar input.chatAt(0); 
Citera
2013-02-06, 12:03
  #5
Medlem
key33s avatar
Kod:
	Scanner in = new Scanner(System.in);
	int count = 0;    
	String sent = "fill me up";
	System.out.println("Letter to search for:");
	String slet = in.nextLine();
	char letter= slet.charAt(0);
	for(int x = 0; x < sent.length(); x++)
	    if(sent.charAt(x) == letter)
		    count++;
	System.out.println(count + " " + letter + " was found");
Citera
2013-02-06, 16:45
  #6
Medlem
Era lösningar använder andra funkioner än jag tillåts göra, t.ex. så använder vi inte System.print.out vilket var just den jag menade när jag minns att jag använt andra funktioner för in och utmatning förr och jag kan säga att jag gillade det sättet mer än detta... Jag försökte ta åt er så mycket jag kunde av era inlägg men får fortfarande inte case 5 att fungera. GAH! Här kommer koden:

Kod:
case 5:
					//Kontrollerar om bokstav finns i ordet
               int antal;
               String getChar = JOptionPane.showInputDialog("Mata in den bokstav du vill kontrollera: ");
               for(int i = ord.length() -1; i>=0; i--)
               {
                  if(getChar = ord.charAt(i))
                  {  
                     antal++;
                  }
                  
               }
               JOptionPaneshowMessageDialog(null, "Bokstaven " + getChar + " förekommer " + antal, " gånger i ordet!");
                     
                  
               
					break;

Det är vid if-satsen jag får meddelandena:

Uppgift.java:66: incompatible types
found : char
required: java.lang.String
if(getChar = ord.charAt(i))



och

uppgift.java:66: incompatible types
found : java.lang.String
required: boolean
if(getChar = ord.charAt(i))


Och snälla påpeka vad som är fel istället eftersom att det är en djungel att läsa era koder.
__________________
Senast redigerad av Revolutionz 2013-02-06 kl. 16:58.
Citera
2013-02-06, 17:03
  #7
Medlem
Yes! Äntligen löste jag det

Kod:
case 5:
					//Kontrollerar om bokstav finns i ordet
               int antal = 0;
               String getChar = JOptionPane.showInputDialog("Mata in den bokstav du vill kontrollera: ");
               for(int i = ord.length() -1; i>=0; i--)
               {
                  if(getChar.charAt(0) == ord.charAt(i))
                  {  
                     antal++;
                  }
                  
               }
               JOptionPane.showMessageDialog(null, "Bokstaven " + getChar + " förekommer " + antal + " gånger i ordet!");
Citera
2013-02-07, 07:51
  #8
Medlem
JohnLocke2s avatar
Citat:
Ursprungligen postat av Revolutionz
Era lösningar använder andra funkioner än jag tillåts göra, t.ex. så använder vi inte System.print.out vilket var just den jag menade när jag minns att jag använt andra funktioner för in och utmatning förr och jag kan säga att jag gillade det sättet mer än detta... Jag försökte ta åt er så mycket jag kunde av era inlägg men får fortfarande inte case 5 att fungera. GAH! Här kommer koden:

Kod:
case 5:
					//Kontrollerar om bokstav finns i ordet
               int antal;
               String getChar = JOptionPane.showInputDialog("Mata in den bokstav du vill kontrollera: ");
               for(int i = ord.length() -1; i>=0; i--)
               {
                  if(getChar = ord.charAt(i))
                  {  
                     antal++;
                  }
                  
               }
               JOptionPaneshowMessageDialog(null, "Bokstaven " + getChar + " förekommer " + antal, " gånger i ordet!");
                     
                  
               
					break;

Det är vid if-satsen jag får meddelandena:

Uppgift.java:66: incompatible types
found : char
required: java.lang.String
if(getChar = ord.charAt(i))



och

uppgift.java:66: incompatible types
found : java.lang.String
required: boolean
if(getChar = ord.charAt(i))


Och snälla påpeka vad som är fel istället eftersom att det är en djungel att läsa era koder.

Du vet ju redan hur du plockar ut en char ur en sträng eller hur....

if(getChar.charAt(0) == ord.charAt(i))
{
antal++;
}
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in