RzymskieNaArabskie - aplikacja okienkowa i problem.

0

Witam wszystkich, mój pierwszy post na Forum, no i od razu prośba.
Na zajęcia robimy aplikacje zamianiajaca liczby rzymskie na arabskie i na odwrót, niby proste, w C++ napisałem, Jave w konsoli tez ogarniam, mam teraz problem z aplikacją okienkową w Javie.

Ogólnie nie zmienia liczb rzymskich na arabskie (zmiania CD, ale C już nie).
Nie mogę znaleźć błędu jakoś. Oto kod:

Okno.java

    private void NaArabska(java.awt.event.ActionEvent evt) {                            
        // TODO add your handling code here: 
        String rzymska=jTextField2.getText().trim(); 
        Arabskie lRzymska = new Arabskie(rzymska); 
        jLabel4.setText("Wynik = "+lRzymska.naArabskie(rzymska)); 
    }   

Arabskie.java


public class Arabskie  { 
    int i, x=1,z; 
    private char[] a; 
    private final String y; 

Arabskie(String y){ 
this.y = y;            // duża szansa, że tutaj coś zepsułem :D 
} 

double naArabskie(String rzymska){ 
int ar = 0; 
String strOrig = rzymska; 
char[] rz; 
rz = strOrig.toCharArray(); 
int k = rz.length; 
for(int f=0; f < k; f++){ 
         switch(rz[f]){ 
            case 'I': { 
                            if(rz[f+1]=='V') {ar+=4; f++;} 
                            else if(rz[f+1]=='X'){ar+=9;f++;} 
                            else ar++; 
                            break; 
                      } 
            case 'V': { 
                            ar+=5; 
                            break; 
                      } 
            case 'X': { 
                            if(rz[f+1]!='C' && rz[f+1]!='L') ar+=10; 
                            else if(rz[f+1]=='C'){ ar+=90; f++;} 
                            else if(rz[f+1]=='L') {ar+=40; f++;} 
                            break; 
                      } 
            case 'L': { 
                            ar+=50; 
                            break; 
                      } 
            case 'C': { 
                            if(rz[f+1]=='D'){ ar+=400;f++;  } 
                            else if(rz[f+1]=='M'){ ar+=900; f++;  } 
                            else ar = ar+100; f++; 
                            break; 
                      } 
            case 'D': { 
                            ar+=500; 
                            break; 
                      } 
            case 'M': { 
                            ar+=1000; 
                            break; 
                      } 
    }
}
return ar; 
    }
}
1

this.y = y; // duża szansa, że tutaj coś zjeb*** .

To jest kulturalne forum.

0

Ale wtopa. ;X
Jak to gdzieś czytałem.. bo komentarze są dla autora.. ;D

Przepraszam :)

Nie możliwe, żeby problem był tak trudny. prosiłbym o jakieś wskazówki.. ?

0

Nie wykraczasz czasem poza zakres tablicy?

for(int f=0; f < k; f++){
 if(rz[f+1] //... ??
0

Hmm, no niby tak.. ale.. nie rozumiem czegoś.
Funkcja sprawdzania jest praktycznie skopiowana z funkcji, która działą w konsoli..
Chyba nie ogarniam..

A jak to rozwiązać?

0

Na pewno działała Ci na konsoli? Jak przekraczałeś tablicę?

0
import java.io.IOException; 


public class Arabska extends Rzymska { 
    int i, x=1,z; 
        
    void zmianaRA(){ 
        System.out.print("Podaj liczbe rzymska: "); 
        for(i=0; i<=x; i++){ 
        try { 
            rz[i]=(char) System.in.read();  // wczytywanie 
            x=System.in.available(); 
            z=x; 
        } catch (IOException blad) { 
            blad.printStackTrace(); 
        } 
        } 
        for(i=0; i<=z; i++){ 
            switch(rz[i]){ 
            case 'I': { 
                            if(rz[i+1]=='V') {ar+=4; i++;} 
                            else if(rz[i+1]=='X'){ar+=9;i++;} 
                            else ar++; 
                            break; 
                      } 
            case 'V': { 
                            ar+=5; 
                            break; 
                      } 
            case 'X': { 
                            if(rz[i+1]!='C' && rz[i+1]!='L') ar+=10; 
                            else if(rz[i+1]=='C'){ ar+=90; i++;} 
                            else if(rz[i+1]=='L') {ar+=40; i++;} 
                            break; 
                      } 
            case 'L': { 
                            ar+=50; 
                            break; 
                      } 
            case 'C': { 
                            if(rz[i+1]=='D'){ ar+=400;i++; } 
                            else if(rz[i+1]=='M'){ ar+=900; i++;} 
                            else ar+=100; 
                            break; 
                      } 
            case 'D': { 
                            ar+=500; 
                            break; 
                      } 
            case 'M': { 
                            ar+=1000; 
                            break; 
                       } 
            default: System.out.println(" Blad! Zle wpisales liczbe."); 
            } 
            } 
    System.out.println("Liczba arabska to: " + ar);     // wyswietlanie 
    } 
} 

Kod konsolowy.
Przyznaję, nie mój, ale sens ten sam... Chyba, że czegoś nie zrozumiałem.

0
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Ramka extends JFrame{
    Ramka (){
        this.CreateAndShowGUI();
    }
        private JTextField text = new JTextField();
        private JLabel ltext = new JLabel();
        private JPanel panel = new JPanel(new BorderLayout());
  private void CreateAndShowGUI() {
        text.addKeyListener(new KeyAdapter() {
            @Override
                public void keyPressed(KeyEvent e) {
                    if (e.getKeyCode() == KeyEvent.VK_ENTER){
                        ltext.setText("" + zmiana_na_arabskie(text.getText()));
                    }
                }
        });
        panel.setLayout(new GridLayout(2,0));
        panel.add(text);
        panel.add(ltext);

        this.setTitle("Arabskie");
        this.setLocation(100, 100);
        this.setSize(150,100);
        this.getContentPane().add(panel);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //this.setVisible(true);
    }
        public int zmiana_na_arabskie(String rz){
            int ar = 0;
            boolean czy2 = false;
            for(int f = 0; f < rz.length(); f++){
                if (czy2){
                    switch (rz.charAt(f))
                    {
                        case 'I':   {
                                        ar++; break;
                                    }
                        case 'V':   {
                                        if (rz.charAt(f-1) == 'I')  ar += 3;
                                        else ar += 5;
                                        break;
                                    }
                        case 'X':   {
                                        if (rz.charAt(f-1) == 'I')  ar += 8;
                                        else ar += 10;
                                        break;
                                    }
                        case 'C':   {
                                        ar += 100; break;
                                    }
                        case 'D':   {   if (rz.charAt(f-1) == 'C') ar += 300;
                                        else ar += 500;
                                        break;
                                    }
                        case 'M':   {   if (rz.charAt(f-1) == 'C') ar += 800;
                                        else ar += 1000;
                                        break;
                                    }
                    }
                } else {
                    if (rz.charAt(f) == 'I') { ar +=    1; czy2 = true; continue; }
                    if (rz.charAt(f) == 'V') { ar +=    5; czy2 = true; continue; }
                    if (rz.charAt(f) == 'X') { ar +=   10; czy2 = true; continue; }
                    if (rz.charAt(f) == 'L') { ar +=   50; czy2 = true; continue; }
                    if (rz.charAt(f) == 'C') { ar +=  100; czy2 = true; continue; }
                    if (rz.charAt(f) == 'D') { ar +=  500; czy2 = true; continue; }
                    if (rz.charAt(f) == 'M') { ar += 1000; czy2 = true; continue; }
                }
            }
            return ar;
        }
}

Oczywiście aplikacja nie sprawdza poprawność wprowadzonej liczby rzymskiej ale liczbę ładnie zamienia na arabską.

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