Läs in nummer
Jag har försökt skriva en metod som läser in alla från en String och som sedan lägger till de i en lista. Metoden ska returnera indexet av elementet som kommer direkt efter den sista siffran. Jag har två problem med metoden: 1) Den kan inte hitta siffror som "123" utan den läser den bara som "1", "2" och "3". 2) Jag vet inte hur jag ska göra med indexet. Det här är koden som jag har just nu.
Kan du visa ett exempel på input och förväntad output. Alltså visa hur du skulle anropa funktionen och skriv ut vad du vill att funktionen ska returnera.
Tänk på att en character inte är samma som sträng.
Character är ett tecken o skrivs ofta såhär 'a', medan sträng skrivs "a".
Strängar är egentligen bara en lista av characters
"hej" = ['h', 'e', 'j']
Så du läser av character för character o då kan inte "123" funka eftersom det är en sträng o inte en character.
Jag vill att de här testen ska vara "true"
Jag tror att indexet blir rätt i alla fall.
Du kan införa en strängvariabel x och inuti din if-sats så lägger du på siffran på x. Till sist gör du s.add(x).
Det första testet blir "true" men den andra blir "false". x verkar skriva över det tidigare värdet med den nya och kan inte se att de är sammansatta
Kan du kopiera in koden här?
int readNumber(List<String> a, String add, int startIndex) {
List<String> listOfNumbers = new ArrayList<>();
int index = 0;
String x = " ";
for (char c: add.toCharArray()) {
if (Character.isDigit(c)) {
String s = String.valueOf(c);
x = " " + c;
a.add(s);
index++;
}
}
a.add(x);
return index;
}
Ja, x = " " + c kastar ju bort det gamla värdet på x. Det du vill göra är x = x + c.
Gör s.add bara på slutet, inte i loopen, annars får du
1
2
3
123
Det andra testet blir fortfarande "false". Den kan nu läsa sammansatta siffror så jag vet inte vad som blir fel. Det här är koden som jag har skrivit:
int readNumber(List<String> a, String add, int startIndex) {
List<String> listOfNumbers = new ArrayList<>();
int index = 0;
String x = " ";
String s = " ";
for (char c: add.toCharArray()) {
if (Character.isDigit(c)) {
s = String.valueOf(c);
x = x + c;
index++;
}
}
a.add(s);
a.add(x);
return index;
}
och det här är testet som är "false"
out.println(numbers.contains("123") && !numbers.contains("1"));
numbers.clear();
Skriv ut a och titta vad som ligger där.
Fixat!! Variabeln s behövdes inte och x behöver deklareras som "" för att vara tom :) Tack för hjälpen!
String x = " ";
Det är väl ett blank space där?
beerger skrev:String x = " ";
Det är väl ett blank space där?
ja
Na5a skrev:beerger skrev:String x = " ";
Det är väl ett blank space där?
ja
Då är den ju inte tom från början?
Nej, det var den inte. Jag såg det när jag printade ut arrayen