problem z porównywaniem

0

Witam
mam następujący problem po uruchomieniu programu pojawia mi się aplet z zawartością pliku jest ona w 2 linijkach gdy przepisuje linijki i litera, którą aktualnie wpisuje powtarza się, na początku, którejś linijki jest automatycznie dopisywana do niej np. w 1 linijce jest słowo las i w 2 sad jak wpiszę las to od 2 linijki dodaje s a tego nie chcę. Chciałbym aby po skończeniu pierwszej linijki przeszedł do 2 itp.

    	ArrayList<Object> teksty = new ArrayList<>();
    	try {
			FileReader fr = new FileReader(nazwa);
			BufferedReader br = new BufferedReader(fr);
			
			 try {
				while ((s = br.readLine()) != null){
					 teksty.add(new ArrayList<Object>());
				     ((ArrayList<String>)teksty.get(i)).add(s);
				     i++;
					 }
				for(int i= 0; i < teksty.size();i++){  
			         for(j = 0; j < ((ArrayList<?>)teksty.get(i)).size(); j++){
			            linijka0=(String)((ArrayList<?>)teksty.get(0)).get(j) +"  ";
			            linijka1=(String)((ArrayList<?>)teksty.get(1)).get(j) +"  ";
			             } 
			    	 }
			} catch (IOException e) {
			
				e.printStackTrace();
			}
				 
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
    }
    
    
    
    public void paint(Graphics g)
    {
    	g.setFont(new Font("Tahoma", Font.PLAIN, 25));
    	g.drawString(linijka0, 35, 50);
    	g.drawString(linijka1, 35, 100);
    	g.setColor(Color.blue);
    	g.drawString(wpisane0, 35, 75); 
    	g.drawString(wpisane1, 35, 125);


    	
    }
    public static void main(String[] args) throws IOException
    {
        Lekcje canvas = new Lekcje("c:/1.txt");                     
        JFrame frame = new JFrame();
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(canvas);                    
        frame.setVisible(true);
    }



	@Override
	public void keyTyped(KeyEvent e) {
		
		switch(wybór){
		  
			case 1:
				
					pozycja = wpisane0.length();{
						if (e.getKeyChar() ==linijka0.charAt(pozycja)){
							wpisane0 = wpisane0 + e.getKeyChar( ); // dodaj wbita literke do stringu porownawczego
							repaint( );
							}
						else
							repaint();
						if(linijka0.equals(wpisane0)== true){
							wybór = 2;
							break;
						}
				       }
				

			  
		  case 2:
			  pozycja = wpisane1.length();{
				  if (e.getKeyChar() ==linijka1.charAt(pozycja)){
					wpisane1 = wpisane1 + e.getKeyChar( );
					repaint( );
				  }
				  else
				    repaint();
				  }
		  }
		  
}
}
0

Zupełnie nie rozumiem na czym polega problem.
Podczas pisania kodu wielkość wcięcia losujesz?

0

Co to jest:
pozycja = wpisane1.length();{
czemu po średniku jest klamra?
Czemu przed case 2 nie ma breaka do case 1?

Czemu break jest wewnątrz ifa:

if(linijka0.equals(wpisane0)== true){
                                                        wybór = 2;
                                                        break;
                                                }
0

Zrób zamiast switcha ify i uporządkuj klamry bo nic nie rozumiem z tego ;/ Poprzednio chodziło mi o zapis
case 1: kod;
break;
case2: kod;
ale nie rozumiem problemu nadal.

0

Krótka lekcja jak należy zgłaszać błędy:

  1. Należy podać kroki do reprodukcji problemu. Dokładne kroki, np. "uruchamiam applet. Klikam na X. Wpisuje z klawatury XYZ. bla bla bla"
  2. Należy napisać jakiego efektu oczekiwałeś
  3. Należy napisać jaki efekt wystąpił
    Z twojego opisu rozumiem tyle że masz jakis applet i coś wpisujesz i że masz las oraz sad (jesteś rolnikiem?).
0

Powoli zaczynam rozumieć o co ci chodzi, ale wydaje mi się że to jest w ogóle całkowicie źle napisane.
Poza tym abstrahując od tego twojego buga, to ten kod nadaje się tylko do wyrzucenia. Czemu? Wyobraź sobie że ja chciałbym żeby mi to działało dla 1000 linijek. Czy nadal napisałbyś to tak samo? Z tymi copy-pastami? Przecież te WSZYSTKIE case są IDENTYCZNE. Cały ten kod to jeden wielki wtf.

0

To napisz teraz to samo dla 1024 linijek.

0

@Voytek1987 O RLY? A jakby wpisane było tablicą to czy zamiast 1024 case'ów nie byłoby po prostu:

pozycja = wpisane[wybor].length();
if (e.getKeyChar() == linijka[wybor].charAt(pozycja)){
  wpisane[wybor] +=  e.getKeyChar( );
}
repaint();

? o_O
Programowanie wymaga myślenia!

Tutaj tak samo, perełka:

linijka0=(String)((ArrayList<?>)teksty.get(0)).get(j) +"  ";
linijka1=(String)((ArrayList<?>)teksty.get(1)).get(j) +"  ";
linijka2=(String)((ArrayList<?>)teksty.get(2)).get(j) +"  ";
linijka3=(String)((ArrayList<?>)teksty.get(3)).get(j) +"  ";

tylko powiedz mi czemu wolałbyś tu mieć 1024 skopiowane linie kodu zamiast

for (int i=0;i<n;i++){
  linijka[i]=(String)((ArrayList<?>)teksty.get(i)).get(j) +"  ";
}

Abstrahuje cały czas od tego że ten kod w ogóle ma niewiele sensu...

0

Bo musisz tam teraz mieć tablice albo jakieś List<>. Ty w ogóle masz jakiekolwiek pojęcie o programowaniu w javie? o_O

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