gadery poluki java

0

uczę się programować, piszę najprostszy algorytm i chcę z tego pomału rozwinąć duży projekt. na tym przećwiczyć wszytskie podstawy javy

i mam problem z kodem - rzutowanie typów. wiem, że lepiej to napisać dając alfabet w tablice i ty char- już taki napisałam, ale nie chcę zamykać tego tematu tylko dowiedzieć się jak naprawić ten kod.


``` String Cipher = "";
        String alphabet = "GA-DE-RY-PO-LU-K";
        String word = "anna";

        
        for(int i = 0; i<= Integer.parseInt(word); i++)
        {   
            for(int j = 0; j<=Integer.parseInt(alphabet); j++ )
            {
                if(word[i] == alphabet[j])
               {
                if (j % 2 == 0)
                {      
                    Cipher[i] = alphabet[j+1];
                    break;
                }
                
                else
                {
                    Cipher[i] = alphabet[j-1];
                    break;
                }
               }
            }
        }
        ```java

0
  1. Z dokumentacji Integer.parseInt():

Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus sign '-' ('\u002D') to indicate a negative value or an ASCII plus sign '+' ('\u002B') to indicate a positive value. The resulting integer value is returned, exactly as if the argument and the radix 10 were given as arguments to the parseInt(java.lang.String, int) method.

Chodziło Ci o word.length()...?

  1. "word[i]" - chodziło Ci chyba o word.charAt(i)?
  2. Gdzie tu jest rzutowanie typów?

Btw. używasz jakiegoś IDE, czy piszesz w notatniku? Bo takie błędy wszystko Ci wyłapie. Nie mówiąc o tym, że to się w ogóle nie skompiluje. I wypadałoby napisać, co ten algorytm ma właściwie robić.

0

w netbeans

chodziło mi w pytaniu, dlaczego te 3 linkjki podkreśla na czerwono
1 if(word[i] == alphabet[j])
2. Cipher[i] = alphabet[j+1];
3. Cipher[i] = alphabet[j-1];

na czym polega zły zapis ich, co nie tak

1

Bo obiekt to co innego niż tablica? W Javie nie możesz się odnieść do pojedynczego znaku Stringa w taki sposób, musisz użyć funkcji charAt(int position) która zwróci Ci chara. Nie wiem co Netbeans wypluwa, ale w komunikacie który przesyła powinno to być jasne.

0

Netbeans wywala blad.
array required, but String found

0

poprawiłam zgodnie z tym, ale nie zmieniło to sytuacji.

zrobiłam screen, widać co podkresla i jaki blad.

1

No to jeszcze przećwicz czytanie ze zrozumieniem. String to nie tablica, nie możesz użyć operatora [] na Stringu. Poza tym String jest niemutowalny, nie możesz zmienić zawartości Stringa - możesz co najwyżej stworzyć nowego. Jeśli bardzo chcesz mieć mutowalną tablicę znaków to sobie taką zrób za pomocą np char[] tablicaZnaków = new char[10];

0

```    String Cipher = "";
        char cph = Cipher.charAt(20);
        String alphabet = "GA-DE-RY-PO-LU-K";
        char alp = alphabet.charAt(20);
        String word = "anna";
        char w = word.charAt(10);

        
        for(int i = 0; i<= w; i++)
        {   
            for(int j = 0; j<=alp; j++ )
            {
                if(w == alp)
               {
                if (j % 2 == 0)
                {      
                    Cipher = alp + "";
                    break;
                }
                
                else
                {
                    System.out.println("Niemożliwe szyfrowanie");

                }
                
               }
              System.out.println(Cipher);  
            }```java




dalej coś nie dziala

0

z tablica mam napisane, i rozumiem, ale by nauczyć się chce tez ogarnac jak zrobic na stringach ;)

0

dalej coś nie dziala

I mamy się domyślić co nie działa. Komunikaty błędów są zjadane przez jakieś mityczne stworzenie.

0
  1. Wydaje mi się, że nie zwróci Ci 20 znaku, bo aż tyle nawet nie ma;
  2. Masz "GA-DE-RY-PO-LU-K" bez "I" na końcu;
  3. Daj logi z konsoli
0

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 17
at java.lang.String.charAt(String.java:658)
at cipher.Cipher.main(Cipher.java:20)
C:\Users\SQ019\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml Java returned: 1
BUILD FAILED (total time: 0 seconds)

0
        String Cipher = "";
        char cph = Cipher.charAt(17);
        String alphabet = "GA-DE-RY-PO-LU-KI";
        char alp = alphabet.charAt(20);
        String word = "anna";
        char w = word.charAt(10);

        
        for(int i = 0; i<= w; i++)
        {   
            for(int j = 0; j<=alp; j++ )
            {
                if(w == alp)
               {
                if (j % 2 == 0)
                {      
                    Cipher = alp + "";
                    break;
                }
                
                else
                {
                  System.out.println("Nie da sie zaszyfrowac");  

                }
                
               }
              System.out.println(Cipher);  
            }
        }
``````java

0

Pięknie. W końcu widzimy co się stało. Teraz możemy zobaczyć do dokumentacji: https://docs.oracle.com/javase/7/docs/api/java/lang/StringIndexOutOfBoundsException.html

public class StringIndexOutOfBoundsException extends IndexOutOfBoundsException
Thrown by String methods to indicate that an index is either negative or greater than the size of the string. For some methods such as the charAt method, this exception also is thrown when the index is equal to the size of the string.

Pierwsza linijka w stacktrace, która wskazuje na twój kod zwykle zawiera przyczynę błędu (lub jest wskazówką). Jeśli masz stacktrace:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 17
at java.lang.String.charAt(String.java:658)
at cipher.Cipher.main(Cipher.java:20)

to błędu szukaj w pliku Cipher.java w 20-tej linijce.

0

Autorze, musisz chyba poczytać o totalnych podstawach Javy. Ten kod zupełnie nie ma sensu. Zresztą to Ci mówi nawet Netbeans, więc nie wiem czemu dziwisz się, że "coś nie działa". Linki po polsku, by było łatwiej.

https://stormit.pl/string/
http://www.altcontroldelete.pl/artykuly/java-operacje-na-tekscie/

1 użytkowników online, w tym zalogowanych: 0, gości: 1