15 svar
293 visningar
Na5a är nöjd med hjälpen
Na5a 388
Postad: 9 jul 2021 19:48

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.

beerger 962
Postad: 9 jul 2021 22:16

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. 

beerger 962
Postad: 9 jul 2021 22:19

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. 

Na5a 388
Postad: 10 jul 2021 12:30

Jag vill att  de här testen ska vara "true"

Laguna Online 28587
Postad: 10 jul 2021 13:27

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).

Na5a 388
Postad: 10 jul 2021 15:20

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

beerger 962
Postad: 10 jul 2021 15:23

Kan du kopiera in koden här?

Na5a 388
Postad: 10 jul 2021 15:27
 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;

    }
Laguna Online 28587
Postad: 10 jul 2021 15:54

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

Na5a 388
Postad: 10 jul 2021 19:18

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();
Laguna Online 28587
Postad: 10 jul 2021 19:30

Skriv ut a och titta vad som ligger där.

Na5a 388
Postad: 10 jul 2021 19:36

Fixat!! Variabeln s behövdes inte och x behöver deklareras som "" för att vara tom :) Tack för hjälpen!

beerger 962
Postad: 10 jul 2021 19:39

String x = " ";

Det är väl ett blank space där?

Na5a 388
Postad: 10 jul 2021 21:22
beerger skrev:

String x = " ";

Det är väl ett blank space där?

ja

beerger 962
Postad: 10 jul 2021 21:23
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?

Na5a 388
Postad: 11 jul 2021 20:46

Nej, det var den inte. Jag såg det när jag printade ut arrayen

Svara Avbryt
Close