Frage zu String index out of range: -1

Hallo zusammen,

ich beschäftige mich seit ca. einer Woche mit Java und habe mir ein Programm zusammengeschustert, dass mir eine Prüfziffer berrechnen soll. Es gibt zwei Knöpfe (einer soll die Prüfziffer berrechnen und der andere beendet das Programm) und zwei Textfelder (in Textfeld tippt man eine 8-stellige Zahl und in Textfeld2 wird die 8-stellige Zahl inkl. Prüfziffer ausgegeben). Dafür habe ich mir die aktuelle XDEV-Version (4.0.1) installiert und nach einigem rumbasteln folgenden Code erstellt:

Java:
package Fenster;

import xdev.lang.EventHandlerDelegate;
import xdev.ui.GBC;
import xdev.ui.XdevButton;
import xdev.ui.XdevContainer;
import xdev.ui.XdevSplitPane;
import xdev.ui.XdevTextField;
import xdev.ui.XdevWindow;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JOptionPane;


public class Wnd1
extends XdevWindow 
{

	@EventHandlerDelegate void button_mouseClicked(MouseEvent event) 
	{
		String PNR;
		String NR1,NR2,NR3,NR4,NR5,NR6,NR7,NR8;
		Integer NR1INT,NR2INT,NR3INT,NR4INT,NR5INT,NR6INT,NR7INT,NR8INT ;
		String NR2STR, NR4STR, NR6STR, NR8STR;
		Integer NR2TEST1, NR2TEST2, NR4TEST1, NR4TEST2, NR6TEST1, NR6TEST2, NR8TEST1, NR8TEST2;
		Integer NR1B,NR2B,NR3B,NR4B,NR5B,NR6B,NR7B,NR8B;
		Integer Pruefziffer;
		
		PNR = textField.getText();
		
		if (PNR.length() != 8) 
		{
		JOptionPane.showMessageDialog(null,"Nummer muss 8-stellig sein!","Fehler", JOptionPane.PLAIN_MESSAGE);
		}
		else
		{
		textField2.setVisible(true);
		NR1 = PNR.substring (1, 1);
		NR2 = PNR.substring (2, 1);
		NR3 = PNR.substring (3, 1);
		NR4 = PNR.substring (4, 1);
		NR5 = PNR.substring (5, 1);
		NR6 = PNR.substring (6, 1);
		NR7 = PNR.substring (7, 1);
		NR8 = PNR.substring (8, 1);
		
		NR1INT= Integer.parseInt(NR1);
		NR2INT= Integer.parseInt(NR2);
		NR3INT= Integer.parseInt(NR3);
		NR4INT= Integer.parseInt(NR4);
		NR5INT= Integer.parseInt(NR5);
		NR6INT= Integer.parseInt(NR6);
		NR7INT= Integer.parseInt(NR7);
		NR8INT= Integer.parseInt(NR8);
		
		NR1B= NR1INT*1;
		
		if (NR2INT*2<10)
		{
		NR2B= NR2INT*2;
		}
		else
		{
		NR2STR= String.valueOf (NR2INT*2);
		NR2TEST1 = Integer.parseInt (NR2STR.substring (1,1));
		NR2TEST2 = Integer.parseInt (NR2STR.substring (2,1));
		NR2B= NR2TEST1+NR2TEST2;
		}
		
		NR3B= NR3INT*1;
		
		if (NR4INT*2<10)
		{ 
		NR4B=NR4INT*2;
		}
		else
		{
		NR4STR= String.valueOf(NR4INT*2);
		NR4TEST1 = Integer.parseInt (NR4STR.substring (1,1));
		NR4TEST2 = Integer.parseInt (NR4STR.substring (2,1));
		NR4B= NR4TEST1+NR4TEST2;
		}
		
		NR5B= NR5INT*1;
		
		if (NR6INT*2<10)
		{ 
		NR6B=NR6INT*2;
		}
		else
	    {
		NR6STR= String.valueOf(NR6INT*2);
		NR6TEST1 = Integer.parseInt (NR6STR.substring (1,1));
		NR6TEST2 = Integer.parseInt (NR6STR.substring(2,1));
		NR6B= NR6TEST1+NR6TEST2;
		}
		
		NR7B= NR7INT*1;
		
		if (NR8INT*2<10)
		{
		NR8B=NR8INT*2;
		}
		else
		{
		NR8STR= String.valueOf(NR8INT*2);
		NR8TEST1 = Integer.parseInt (NR8STR.substring (1,1));
		NR8TEST2 = Integer.parseInt (NR8STR.substring (2,1));
		NR8B= NR8TEST1+NR8TEST2;
		}
		
		Pruefziffer= NR1B+NR2B+NR3B+NR4B+NR5B+NR6B+NR7B+NR8B;
		String Pruefziffershow= String.valueOf (Math.ceil(Pruefziffer/10)*10-Pruefziffer);
		textField2.setText (Pruefziffer+Pruefziffershow);
		}
	}


	@EventHandlerDelegate void button2_mouseClicked(MouseEvent event) 
	{
		System.exit(0);
	}


	
	XdevSplitPane splitPane, splitPane2;
	XdevContainer container, container2;
	XdevTextField textField, textField2;
	XdevButton button, button2;
	


	{
		container = new XdevContainer();
		button = new XdevButton();
		splitPane = new XdevSplitPane();
		container2 = new XdevContainer();
		splitPane2 = new XdevSplitPane();
		textField = new XdevTextField();
		textField2 = new XdevTextField();
		button2 = new XdevButton();
		
		this.setPreferredSize(new Dimension(600,400));
		button.setTabIndex(1);
		button.setText("Prüfziffer errechnen");
		splitPane.setDividerLocation(318);
		splitPane.setOrientation(XdevSplitPane.VERTICAL_SPLIT);
		splitPane2.setDividerLocation(147);
		splitPane2.setOrientation(XdevSplitPane.VERTICAL_SPLIT);
		textField.setTabIndex(3);
		textField.setFont(new Font("Tahoma Fett",Font.BOLD,20));
		textField2.setVisible(false);
		textField2.setTabIndex(4);
		textField2.setFont(new Font("Tahoma Fett",Font.BOLD,20));
		button2.setTabIndex(2);
		button2.setText("Programm beenden");
		
		textField.saveState();
		textField2.saveState();
		
		splitPane2.setLeftComponent(textField);
		splitPane2.setRightComponent(textField2);
		container2.setLayout(new GridBagLayout());
		splitPane2.setPreferredSize(new Dimension(300,200));
		container2.add(splitPane2,new GBC(1,1,1,1,1.0,1.0,GBC.WEST,GBC.BOTH,new Insets(3,3,3,3),0,0));
		GBC.addSpacer(container2,true,true);
		container2.setPreferredSize(new Dimension(306,206));
		splitPane.setLeftComponent(container2);
		splitPane.setRightComponent(button2);
		container.setLayout(new GridBagLayout());
		container.add(button,new GBC(1,1,1,1,0.1,0.0,GBC.WEST,GBC.HORIZONTAL,new Insets(3,3,3,3),0,0));
		splitPane.setPreferredSize(new Dimension(300,200));
		container.add(splitPane,new GBC(1,2,1,1,1.0,1.0,GBC.WEST,GBC.BOTH,new Insets(3,3,3,3),0,0));
		GBC.addSpacer(container,true,true);
		this.setLayout(new GridBagLayout());
		this.add(container,new GBC(1,1,1,1,0.1,0.1,GBC.WEST,GBC.BOTH,new Insets(0,0,0,0),0,0));
		GBC.addSpacer(this,true,true);
		
		button.addMouseListener(new MouseAdapter()
		{
			@Override
			public void mouseClicked(MouseEvent event)
			{
				button_mouseClicked(event);
			}
		});
		button2.addMouseListener(new MouseAdapter()
		{
			@Override
			public void mouseClicked(MouseEvent event)
			{
				button2_mouseClicked(event);
			}
		});
	}
}

Beim compilieren wird mir erstmal keinerlei Fehlermeldung angezeigt. Der Knopf Progamm beenden sowie die Fehlermeldung wenn man eine nicht 8-stellige Zahl eintippt funktionieren ohne Probleme. Will ich die Prüfziffer berrechnen lassen erhalte ich allerdings folgende Exception(s):

Java:
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
	at java.lang.String.substring(Unknown Source)
	at Fenster.Wnd1.button_mouseClicked(Wnd1.java:46)
	at Fenster.Wnd1$1.mouseClicked(Wnd1.java:191)
	at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Leider hat mich googeln bisher nicht weitergebracht. Habt ihr einen Rat für mich? :bahnhof:

Mit noobiegrüßen
Örnesto
 

Klösp

Aktives Mitglied
Ein wenig unübersichtlich, aber ich vermute der Fehler liegt daran:
Du benutzt die Substring-Methode falsch.
Du musst tatsächlich den Index angeben, wo begonnen werden soll aus dem String "auszuschneiden" und den Index wo er aufhören soll.
Du gibst aber den BeginnIndex an und die Länge. Das funktioniert nicht.

Ich denke aber du machst noch einen Fehler.
Ein String ist im Prinzip ein Array von char (char[]). Arrays beginnen mit dem Index 0 und so muss man auch die Substring-Methode benutzen. Das erste Zeichen steht an am Index 0.

Allerdings kannst du das ganze auch viel einfacher machen.
Wie gesagt ein String ist im Prinzip ein Array von char. Auf dieses kann man auch direkt zugreifen um wie im folgenden Beispiel die einzelnen Zeichen anzusprechen.

Beispiel:
Java:
		String s="12345678";
		char[] chars=s.toCharArray();
		for(int i=0;i<chars.length;i++){
			System.out.println(chars[i]);
		}
 
Zuletzt bearbeitet:

CerO

Mitglied
Hallo,
was mir jetzt so auf die schnelle aufgefallen ist, ist hier das:

Java:
if (PNR.length() != 8) 
        {
        JOptionPane.showMessageDialog(null,"Nummer muss 8-stellig sein!","Fehler", JOptionPane.PLAIN_MESSAGE);
        }
        else
        {
        textField2.setVisible(true);
        NR1 = PNR.substring (1, 1);
        NR2 = PNR.substring (2, 1);
        NR3 = PNR.substring (3, 1);
        NR4 = PNR.substring (4, 1);
        NR5 = PNR.substring (5, 1);
        NR6 = PNR.substring (6, 1);
        NR7 = PNR.substring (7, 1);
        NR8 = PNR.substring (8, 1);

Du gibst der substring Methode falsche Parameter mit.
erster Parameter bestimmt den Anfang des Substrings und der zweite Parameter gibt das Ende des Substrings an.

Java - Substring Funktion

Java:
if (PNR.length() != 8) 
        {
        JOptionPane.showMessageDialog(null,"Nummer muss 8-stellig sein!","Fehler", JOptionPane.PLAIN_MESSAGE);
        }
        else
        {
        textField2.setVisible(true);
        NR1 = PNR.substring (1, 2);
        NR2 = PNR.substring (2, 3);
        NR3 = PNR.substring (3, 4);
        NR4 = PNR.substring (4, 5);
        NR5 = PNR.substring (5, 6);
        NR6 = PNR.substring (6, 7);
        NR7 = PNR.substring (7, 8);
        NR8 = PNR.substring (8, 9);
 

VfL_Freak

Top Contributor
Moin,

Du gibst der substring Methode falsche Parameter mit.
erster Parameter bestimmt den Anfang des Substrings und der zweite Parameter gibt das Ende des Substrings an.
Grundlegend richtig, aber dann müsst ihr auch mit Index '0' beginnen und bis 'Ende - 1' laufen lassen !!

Ein Blick in die API gibt Aufschluß:
String java.lang.String.substring(int beginIndex, int endIndex)
public String substring(int beginIndex, int endIndex)

Returns a new string that is a substring of this string. The substring begins at the specified beginIndex and extends to the character at index endIndex - 1. Thus the length of the substring is endIndex-beginIndex.
Examples:

"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"

Parameters:
beginIndex - the beginning index, inclusive.
endIndex - the ending index, exclusive.
Returns:
the specified substring.

Gruß
Klaus
 
Aiaiaiai,

vielen Dank erstmal für die schnellen Antworten. Ich habe vor kurzem ein bischen mit Delphi rumgespielt und dort funktioniert Substring ein wenig anders als in java was aber nichts daran ändert das ich die falschen werte mitgegeben habe :bloed::bloed::bloed:.

Mit euren Tipps funktioniert das ganze jetzt zumindest schonmal soweit, dass ich ein Ergebnis erhalte ohne Fehlermeldung. Das Ergbenis ist zwar noch nicht richtig aber zumindest läuft es schonmal.

Ich glaube der Knackpunkt liegt irgendwo hier:

Java:
Pruefziffer= NR1B+NR2B+NR3B+NR4B+NR5B+NR6B+NR7B+NR8B;
		String Pruefziffershow= String.valueOf (Math.ceil(Pruefziffer/10)*10-Pruefziffer);
		textField2.setText (Pruefziffer+Pruefziffershow);

Grüße
Örnesto
 

VfL_Freak

Top Contributor
Moin,

Ich glaube der Knackpunkt liegt irgendwo hier:
Java:
Pruefziffer= NR1B+NR2B+NR3B+NR4B+NR5B+NR6B+NR7B+NR8B;
String Pruefziffershow= String.valueOf (Math.ceil(Pruefziffer/10)*10-Pruefziffer);
		textField2.setText (Pruefziffer+Pruefziffershow);
Mal abgesehen davon, dass keiner weiß, von welchem Kackpunkt Du jetzt konkret sprichst und mir auch nicht wirklich klar ist, was Du da versucht ....

aber ... so auf die Schnelle:
(a) Dein "math.ceil" liefert Dir eine double-Wert (Galileo Computing :: Java ist auch eine Insel – 12.3 Die Eigenschaften der Klasse Math)
(b) beim "setText" konkatenierst Du nur ... ist das so gewollt ??

Gruß
Klaus
 
Bitte entschuldige meine Verwirrtheit,

ich meinte übrigens Knackpunkt nicht Kackpunkt ;).

Aber Spass bei Seite was ich hiermit machen möchte:

Java:
int Pruefziffer= Integer.parseInt(String.valueOf(NR1B+NR2B+NR3B+NR4B+NR5B+NR6B+NR7B+NR8B)); 
		int Pruefziffershow= (Math.ceil(Pruefziffer/10)*10-Pruefziffer);
		textField2.setText (PNR+Pruefziffershow);

Also in diesem letzten Teil möchte ich meine Eingabe aus textField inkl. ausgerechneter Prüfziffer in textField2 ausgeben. D.h. am Ende sollte dort eine 9-Stellige Zahlenfolge stehen.

Der Knackpunkt ist so wie ich das sehe:

Java:
int Pruefziffershow= (Math.ceil(Pruefziffer/10)*10-Pruefziffer);

Damit möchte ich eigentlich bezwecken das die errechnete Prüfziffer (NR1B+NR2B+NR3B+NR4B+NR5B+NR6B+NR7B+NR8B)
von der nächst höheren durch 10 Teilbaren Zahl abgezogen wird. Dies ergibt dann die wirkliche Prüfziffer die als 9. Stelle an die Eingabe aus textField angehängt wird.

Grüße
Örnesto
 

VfL_Freak

Top Contributor
Moin,

zum einen schriebst Du noch immer nicht, was genau bei diesem Code passiert oder eben nicht passiert!
Es kann Dir keiner helfen, wenn er niocht weiß, wobei eigenlich .....

Hast zum anderen meinen letzten Post gelesen ???:L
Hier speziell die anmerkung (b) ???:L

Gruß
Klaus
 

CerO

Mitglied
Hallo,

hab mir mal die Zeit genommen und über dein Programm den Debugger laufen lassen. Vorher natürlich noch ein bisschen umgeschrieben, um alles in der Konsole ausgeben zu können.

In meinem KSKB nehme ich an, dass die Zahl 12345678 eingegeben wurde. Wenn ich das Programm jetzt ausführe, gibt er bei der zahl 12345678 am Ende 30 aus, da durch deine Berechnungen im textFeld2
PNR+Pruefziffershow gerechnet und ausgegeben wird. PNR ist 38 und Pruefziffershow ist -8.

Deine vorher 8-Stellige Zahl wird mit hier dieser einen Zeile zu einer 38, da jeder einzelne Integer, der eine Stelle enthält einfach zusammenaddiert wird. Hier vermute ich, das du die einfach hintereinander haben wolltest.
Java:
int Pruefziffer= Integer.parseInt(String.valueOf(NR1B+NR2B+NR3B+NR4B+NR5B+NR6B+NR7B+NR8B));

Dann werden in den vorherigen if und else abfragen ein paar zahlen einfach mal verdoppelt, oder sobald sie mehr als eine Stelle haben aufgeteilt und addiert( z.B ist an der 8.Stelle eine 8, diese wird verdoppelt also 16 und dann wird aus der 16 einfach 1+6 gebildet und an deiner 8. Stelle steht 7). Die Zahlen die durch diese if else abfragen geschleudert werden, werden in der Oben angegebenen Zeile addiert und ergeben unsere 38. Ist das alles Korrekt so ?

Bitte schreibe einmal was GENAU du als Ausgabe haben möchtest, wenn jetzt die Eingabe 12345678 wäre.



Hier ist dann mal das KSKB:

Java:
String PNR;
	     	String NR1,NR2,NR3,NR4,NR5,NR6,NR7,NR8;
	     	Integer NR1INT,NR2INT,NR3INT,NR4INT,NR5INT,NR6INT,NR7INT,NR8INT ;
	     	String NR2STR, NR4STR, NR6STR, NR8STR;
	     	Integer NR2TEST1, NR2TEST2, NR4TEST1, NR4TEST2, NR6TEST1, NR6TEST2, NR8TEST1, NR8TEST2;
	     	Integer NR1B,NR2B,NR3B,NR4B,NR5B,NR6B,NR7B,NR8B;
	        
	        PNR = "12345678";
	        
	        if (PNR.length() != 8) 
	        {
	        System.out.println("Nummer muss 8-stellig sein!");
	        }
	        else
	        {
	        NR1 = PNR.substring (0, 1);
	        NR2 = PNR.substring (1, 2);
	        NR3 = PNR.substring (2, 3);
	        NR4 = PNR.substring (3, 4);
	        NR5 = PNR.substring (4, 5);
	        NR6 = PNR.substring (5, 6);
	        NR7 = PNR.substring (6, 7);
	        NR8 = PNR.substring (7, 8);
	        
	        NR1INT= Integer.parseInt(NR1);
	        NR2INT= Integer.parseInt(NR2);
	        NR3INT= Integer.parseInt(NR3);
	        NR4INT= Integer.parseInt(NR4);
	        NR5INT= Integer.parseInt(NR5);
	        NR6INT= Integer.parseInt(NR6);
	        NR7INT= Integer.parseInt(NR7);
	        NR8INT= Integer.parseInt(NR8);
	        
	        NR1B= NR1INT*1;
	        
	        if (NR2INT*2<10)
	        {
	        NR2B= NR2INT*2;
	        }
	        else
	        {
	        NR2STR= String.valueOf (NR2INT*2);
	        NR2TEST1 = Integer.parseInt (NR2STR.substring (1,1));
	        NR2TEST2 = Integer.parseInt (NR2STR.substring (2,1));
	        NR2B= NR2TEST1+NR2TEST2;
	        }
	        
	        NR3B= NR3INT*1;
	        
	        if (NR4INT*2<10)
	        { 
	        NR4B=NR4INT*2;
	        }
	        else
	        {
	        NR4STR= String.valueOf(NR4INT*2);
	        NR4TEST1 = Integer.parseInt (NR4STR.substring (1,1));
	        NR4TEST2 = Integer.parseInt (NR4STR.substring (2,1));
	        NR4B= NR4TEST1+NR4TEST2;
	        }
	        
	        NR5B= NR5INT*1;
	        
	        if (NR6INT*2<10)
	        { 
	        NR6B=NR6INT*2;
	        }
	        else
	        {
	        NR6STR= String.valueOf(NR6INT*2);
	        NR6TEST1 = Integer.parseInt (NR6STR.substring (0,1));
	        NR6TEST2 = Integer.parseInt (NR6STR.substring(1,2));
	        NR6B= NR6TEST1+NR6TEST2;
	        }
	        
	        NR7B= NR7INT*1;
	        
	        if (NR8INT*2<10)
	        {
	        NR8B=NR8INT*2;ein
	        }
	        else
	        {
	        NR8STR= String.valueOf(NR8INT*2);
	        NR8TEST1 = Integer.parseInt (NR8STR.substring (0,1));
	        NR8TEST2 = Integer.parseInt (NR8STR.substring (1,2));
	        NR8B= NR8TEST1+NR8TEST2;
	        }
	            
	        int Pruefziffer= Integer.parseInt(String.valueOf(NR1B+NR2B+NR3B+NR4B+NR5B+NR6B+NR7B+NR8B)); 
	        int Pruefziffershow= (int) (Math.ceil(Pruefziffer/10)*10-Pruefziffer);
	        
	        System.out.println(Pruefziffer+Pruefziffershow);
	        }
 
Hallo VfL_Freak,

sorry hier nochmal was ich bezwecke:

Mein Programm soll eine 8-Nummer von links nach rechts auseinander nehmen und Einfach, Doppelt, Einfach, Doppelt, usw. die einzelnen Ziffern addieren. Besonderheit: Kommt eine der doppelt genommenen Einzelzahlen über 9 (wird also zweistellig), werden die beiden Stellen dieser Zahl wiederum addiert (statt dass die zweistellige Zahl für die Gesamt-Addition verwendet wird). Das Ergebnis der Gesamt-Addition wird von der nächst höheren durch 10 teilbaren Zahl abgezogen. Das Ergebnis ist die Prüfziffer.

Beispiel:

PNR8 = 12161110

Teil 1 Einfach = 1
Teil 2 Doppelt = 4
Teil 3 Einfach = 1
Teil 4 Doppelt = 12 = 3
Teil 5 Einfach = 1
Teil 6 Doppelt = 2
Teil 7 Einfach = 1
Teil 8 Doppelt = 0

Ergebnis = 13
20 ./. 13 = 7

PNR9 = 121611107

Im Konkreten Beispiel steht als Ausgabe in meinem Programm nun 12161110-3 anstatt 121611107.

zu Punkt (b) ja das ist eigentlich so gewollt. Er soll halt die 8-stellige Eingabe mit der 9. Ziffer "ergänzen".
 
Hi CerO,

sorry habe gerade erst deine Antwort gesehen. Danke dafür schon einmal.

Für die Zahl 12345678 müsste als "Prüfziffer" eine 2 rauskommen.

Das Ergebnis 38 soll auf 40 gerundet werden. Von der 40 wird dann die 38 abgezogen. Also Prüfziffer 2.

Grüße
Örnesto
 

CerO

Mitglied
Achso ok, dann ist dein Fehler klar : D

Java:
int Pruefziffershow= (Math.ceil(Pruefziffer/10)*10-Pruefziffer);

du gibst Math.Ceil Pruefziffer/10 mit. Pruefziffer ist ein integer, und wenn dieser ungerade geteilt wird, lässt er alles hinter dem Komma weg. Angenommen Pruefziffer ist 24, dann wird 24/10 gerechnet was logischerweise 2,4 ist. Aber da die 24 ein Integer ist und kein Double macht er aus 24/10 eine 2. Nun gibst du Mat.ceil eine 2 Mit damit er sie auf die nächste volle Zahl aufrunden kann. 2 ist schon eine volle Zahl also lässt er sie dann so. Danach wird 2*10-24 gerechnet.

Java:
textField2.setText (Pruefziffer+Pruefziffershow);

Hier wird jetzt die Prüfziffer 24+(-4) gerechnet und 20 ausgegeben.

Damit jetzt aber deine 9-Stellige Zahl herauskommt müssen ein paar kleine änderungen gemacht werden.

Java:
int Pruefziffer= Integer.parseInt(String.valueOf(NR1B+NR2B+NR3B+NR4B+NR5B+NR6B+NR7B+NR8B)); 
	            double x = Pruefziffer;
	            x = x/10;
	            int Pruefziffershow= (int) (Math.ceil(x)*10-Pruefziffer);
	            textField2.setText(PNR +""+ Pruefziffershow);
	            }

Pruefziffer muss extra als double umgesetzt werden und Math.Ceil mitgegeben werden.
Und als letztes muss in textField2.setText dafür gesorgt werden, dass er die zwei Integer nicht zusammenaddiert, sondern einfach hintereinander schreibt. Das mache ich indem ich zwischen den Zahlen zwei Anführungszeichen setze.
Ist zwar nicht sehr Elegant gelöst, aber dafür einfach zu verstehen.
 
Zuletzt bearbeitet:
Aaaahh :idea::idea::idea:,

man man man dank dir ist mir der Fahler jetzt auch klar :D. Da googelt :rtfm: man sich einen zurecht und liest die ganze Zeit das ceil einen doublewert erwartet und gibt ihm dann eine Integerwert mit... :bloed::bloed:

Vielen Dank. Nun macht das "Programm" was es soll.

Java:
package Fenster;

import xdev.lang.EventHandlerDelegate;
import xdev.ui.GBC;
import xdev.ui.XdevButton;
import xdev.ui.XdevContainer;
import xdev.ui.XdevSplitPane;
import xdev.ui.XdevTextField;
import xdev.ui.XdevWindow;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JOptionPane;


public class Wnd1
extends XdevWindow 
{

	@EventHandlerDelegate void button_mouseClicked(MouseEvent event) 
	{
		String PNR;
		String NR1,NR2,NR3,NR4,NR5,NR6,NR7,NR8;
		Integer NR1INT,NR2INT,NR3INT,NR4INT,NR5INT,NR6INT,NR7INT,NR8INT ;
		String NR2STR, NR4STR, NR6STR, NR8STR;
		Integer NR2TEST1, NR2TEST2, NR4TEST1, NR4TEST2, NR6TEST1, NR6TEST2, NR8TEST1, NR8TEST2;
		Integer NR1B,NR2B,NR3B,NR4B,NR5B,NR6B,NR7B,NR8B;
		
		PNR = textField.getText();
		
		if (PNR.length() != 8) 
		{
		JOptionPane.showMessageDialog(null,"Nummer muss 8-stellig sein!","Fehler", JOptionPane.PLAIN_MESSAGE);
		}
		else
		{
		NR1 = PNR.substring (0,1);
		NR2 = PNR.substring (1,2);
		NR3 = PNR.substring (2,3);
		NR4 = PNR.substring (3,4);
		NR5 = PNR.substring (4,5);
		NR6 = PNR.substring (5,6);
		NR7 = PNR.substring (6,7);
		NR8 = PNR.substring (7,8);
		
		NR1INT= Integer.parseInt(NR1);
		NR2INT= Integer.parseInt(NR2);
		NR3INT= Integer.parseInt(NR3);
		NR4INT= Integer.parseInt(NR4);
		NR5INT= Integer.parseInt(NR5);
		NR6INT= Integer.parseInt(NR6);
		NR7INT= Integer.parseInt(NR7);
		NR8INT= Integer.parseInt(NR8);
		
		NR1B= NR1INT*1;
		
		if (NR2INT*2<10)
		{
		NR2B= NR2INT*2;
		}
		else
		{
		NR2STR= String.valueOf (NR2INT*2);
		NR2TEST1 = Integer.parseInt (NR2STR.substring (0,1));
		NR2TEST2 = Integer.parseInt (NR2STR.substring (1));
		NR2B= NR2TEST1+NR2TEST2;
		}
		
		NR3B= NR3INT*1;
		
		if (NR4INT*2<10)
		{ 
		NR4B=NR4INT*2;
		}
		else
		{
		NR4STR= String.valueOf(NR4INT*2);
		NR4TEST1 = Integer.parseInt (NR4STR.substring (0,1));
		NR4TEST2 = Integer.parseInt (NR4STR.substring (1));
		NR4B= NR4TEST1+NR4TEST2;
		}
		
		NR5B= NR5INT*1;
		
		if (NR6INT*2<10)
		{ 
		NR6B=NR6INT*2;
		}
		else
	    {
		NR6STR= String.valueOf(NR6INT*2);
		NR6TEST1 = Integer.parseInt (NR6STR.substring (0,1));
		NR6TEST2 = Integer.parseInt (NR6STR.substring (1));
		NR6B= NR6TEST1+NR6TEST2;
		}
		
		NR7B= NR7INT*1;
		
		if (NR8INT*2<10)
		{
		NR8B=NR8INT*2;
		}
		else
		{
		NR8STR= String.valueOf(NR8INT*2);
		NR8TEST1 = Integer.parseInt (NR8STR.substring (0,1));
		NR8TEST2 = Integer.parseInt (NR8STR.substring (1));
		NR8B= NR8TEST1+NR8TEST2;
		}
		
		int Pruefziffer= Integer.parseInt(String.valueOf(NR1B+NR2B+NR3B+NR4B+NR5B+NR6B+NR7B+NR8B));
		double x = Pruefziffer;
		x = x/10;
		int Pruefziffershow = (int)(Math.ceil(x)*10-Pruefziffer);
		int show = (int)Pruefziffershow;
		textField2.setText (PNR+""+Pruefziffershow);
		}
	}


	@EventHandlerDelegate void button2_mouseClicked(MouseEvent event) 
	{
		System.exit(0);
	}


	
	XdevSplitPane splitPane, splitPane2;
	XdevContainer container, container2;
	XdevTextField textField, textField2;
	XdevButton button, button2;
	


	{
		container = new XdevContainer();
		button = new XdevButton();
		splitPane = new XdevSplitPane();
		container2 = new XdevContainer();
		splitPane2 = new XdevSplitPane();
		textField = new XdevTextField();
		textField2 = new XdevTextField();
		button2 = new XdevButton();
		
		this.setPreferredSize(new Dimension(432,248));
		button.setTabIndex(1);
		button.setText("Prüfziffer errechnen");
		splitPane.setDividerLocation(144);
		splitPane.setOrientation(XdevSplitPane.VERTICAL_SPLIT);
		splitPane2.setDividerLocation(72);
		splitPane2.setOrientation(XdevSplitPane.VERTICAL_SPLIT);
		textField.setTabIndex(3);
		textField.setFont(new Font("Tahoma Fett",Font.BOLD,20));
		textField2.setTabIndex(4);
		textField2.setFont(new Font("Tahoma Fett",Font.BOLD,20));
		button2.setTabIndex(2);
		button2.setText("Programm beenden");
		
		textField.saveState();
		textField2.saveState();
		
		splitPane2.setLeftComponent(textField);
		splitPane2.setRightComponent(textField2);
		container2.setLayout(new GridBagLayout());
		container2.add(splitPane2,new GBC(1,1,1,1,1.0,1.0,GBC.WEST,GBC.BOTH,new Insets(3,3,3,3),0,0));
		GBC.addSpacer(container2,true,true);
		splitPane.setLeftComponent(container2);
		splitPane.setRightComponent(button2);
		container.setLayout(new GridBagLayout());
		container.add(button,new GBC(1,1,1,1,0.1,0.0,GBC.WEST,GBC.HORIZONTAL,new Insets(3,3,3,3),0,0));
		container.add(splitPane,new GBC(1,2,1,1,1.0,1.0,GBC.WEST,GBC.BOTH,new Insets(3,3,3,3),0,0));
		GBC.addSpacer(container,true,true);
		this.setLayout(new GridBagLayout());
		this.add(container,new GBC(1,1,1,1,0.1,0.1,GBC.WEST,GBC.BOTH,new Insets(0,0,0,0),0,0));
		GBC.addSpacer(this,true,true);
		
		button.addMouseListener(new MouseAdapter()
		{
			@Override
			public void mouseClicked(MouseEvent event)
			{
				button_mouseClicked(event);
			}
		});
		button2.addMouseListener(new MouseAdapter()
		{
			@Override
			public void mouseClicked(MouseEvent event)
			{
				button2_mouseClicked(event);
			}
		});
	}
}

Vielen Dank an euch :toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M kurze frage: Ohne index.of position von string angeben Java Basics - Anfänger-Themen 16
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
I String.split regex Frage Java Basics - Anfänger-Themen 2
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
F String args[] Frage... Java Basics - Anfänger-Themen 5
M string arraylist untersuchen frage Java Basics - Anfänger-Themen 6
M Frage zur Methode Action.putValue(String,Object) Java Basics - Anfänger-Themen 5
S Frage zu String Java Basics - Anfänger-Themen 2
M Frage zu String null-Wert Java Basics - Anfänger-Themen 2
M Factory mit String / Frage zu Generics Java Basics - Anfänger-Themen 2
M Eine kleine Frage bzw kleine Theorie frage String[arg] Java Basics - Anfänger-Themen 6
M Frage bezüglich string compare Java Basics - Anfänger-Themen 6
G Frage:Welche Methodne kann man eine Zahl bzw. ein String Java Basics - Anfänger-Themen 3
semaJ Frage bezüglich String Operation ! Java Basics - Anfänger-Themen 3
R Frage zur Länge von Textfeld und String Java Basics - Anfänger-Themen 4
E Frage zum String Java Basics - Anfänger-Themen 51
G doofe frage^^ int -> string wandeln Java Basics - Anfänger-Themen 3
O eine frage/problem zu string.split() Java Basics - Anfänger-Themen 2
A frage zu (string lenght) Java Basics - Anfänger-Themen 6
C Frage zu: String einlesen -> Array von Chars erhalten Java Basics - Anfänger-Themen 4
G Frage zu Umwandlung char[] in string[] bzw. Schleifen Java Basics - Anfänger-Themen 9
S Dumme Frage... String in Float umwandeln Java Basics - Anfänger-Themen 10
S Frage zu String.indexOf(String) Java Basics - Anfänger-Themen 22
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
D Frage zur IDE IntelliJ IDEA Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben