Variable ohne .matches, isLetter oder isDigit überprüfen

Tiyen

Mitglied
Hallo alle miteinander,

ich habe folgendes Problem, und zwar schreibe ich ein Programm bei dem ich mehere Zahlen eingeben muss. Ich darf zur Überprüfung der eingegebenen Werte weder die Fkt. matches(), isLetter() noch isDigit() verwenden. Gibt es sonst noch eine Möglichkeit eine Variable so zu überprüfen, dass man immer, wenn etwas anderes als eine Zahl eingegeben wird, eine Fehlermeldung ausgespuckt wird ?

Grüße Tiyen
 

Tiyen

Mitglied
Habe mal die Methode in der ich die Variablen überprüfen möchte gepostet:

Java:
	// Berechnung der gegessenen Süßigkeiten
	public static void calculating(int[] bodydata) {

		int sweets[] = new int[5];

			System.out.println("Wie viele Tassen Glühwein haben sie getrunken?: ");
			sweets[0] = input.nextInt(); // Hier soll  man nur Zahlen eingeben können, wenn aber ein char eingegeben wird,
                                                                         Stürzt das Programm ab.
			sweets[0] *= 210;

			System.out.println("Wie viele Stücke Lebkuchen haben sie gegessen?: ");
			sweets[1] = input.nextInt();
			sweets[1] *= 190;

			System.out.println("Wie viele 100g Portionen heiße Maronen haben sie gegessen?: ");
			sweets[2] = input.nextInt();
			sweets[2] *= 200;

			System.out.println("Wie viele 100g Portionen gebrannte Mandeln haben sie gegessen?: ");
			sweets[3] = input.nextInt();
			sweets[3] *= 510;

			System.out.println("Wie viele Stücke Spekulatius haben sie gegessen?: ");
			sweets[4] = input.nextInt();
			sweets[4] *= 45;

		int allcal = 0;
		for (int i = 0; i < sweets.length; i++) {
			allcal += sweets[i];
		}

Ich bin gerade ein bisschen ratlos, da ich nicht genau weiß wie ich das mit der integer.parseInt Fkt. machen soll.
 

saftmeister

Nutze den Saft!
Hi,

versuch mal das:

Java:
    // Berechnung der gegessenen Süßigkeiten
    public static void calculating(int[] bodydata) {
 
        int sweets[] = new int[5];
 
            System.out.println("Wie viele Tassen Glühwein haben sie getrunken?: ");
            try
            {
              String s = input.nextLine()
              sweets[0] = Integer.parseInt(s); // Hier soll  man nur Zahlen eingeben können, wenn aber ein char eingegeben wird,
                                                                         Stürzt das Programm ab.
            }
            catch(NumberFormatException nfe)
            {
                // Fehlermeldung ausgeben und sicherheitshalber mal
                sweets[0] = 0;
            }
 

slowfly

Erfahrenes Mitglied
Meine Variante anhand der ASCII-Table:
Code:
public class Test {
	public static boolean isNumeric(String string) {
		char[] asChar = string.toCharArray();
		for (char c : asChar) {
			if (c < 48 || c > 57) {
				return false;
			}
		}

		return true;
	}

	public static void main(String[] args) {
		String test1 = "1234567890";
		String test2 = "/";
		String test3 = ";";
		System.out.println(isNumeric(test1));
		System.out.println(isNumeric(test2));
		System.out.println(isNumeric(test3));
	}
}

Oder, do kopierst einfach die isDigit-Methode aus java.lang.Character raus und schaust, ob's der Herr Lehrer merkt ;PP
Code:
    /**
     * Determines if the specified character (Unicode code point) is a digit.
     * <p>
     * A character is a digit if its general category type, provided
     * by {@link Character#getType(int) getType(codePoint)}, is
     * <code>DECIMAL_DIGIT_NUMBER</code>.
     * <p>
     * Some Unicode character ranges that contain digits:
     * <ul>
     * <li><code>'\u0030'</code> through <code>'\u0039'</code>, 
     *     ISO-LATIN-1 digits (<code>'0'</code> through <code>'9'</code>)
     * <li><code>'\u0660'</code> through <code>'\u0669'</code>,
     *     Arabic-Indic digits
     * <li><code>'\u06F0'</code> through <code>'\u06F9'</code>,
     *     Extended Arabic-Indic digits
     * <li><code>'\u0966'</code> through <code>'\u096F'</code>,
     *     Devanagari digits
     * <li><code>'\uFF10'</code> through <code>'\uFF19'</code>,
     *     Fullwidth digits
     * </ul>
     *
     * Many other character ranges contain digits as well.
     *
     * @param   codePoint the character (Unicode code point) to be tested.
     * @return  <code>true</code> if the character is a digit;
     *          <code>false</code> otherwise.
     * @see     java.lang.Character#forDigit(int, int)
     * @see     java.lang.Character#getType(int)
     * @since   1.5
     */
    public static boolean isDigit(int codePoint) {
        boolean bDigit = false;

        if (codePoint >= MIN_CODE_POINT && codePoint <= FAST_PATH_MAX) {
            bDigit = CharacterDataLatin1.isDigit(codePoint);
        } else {
            int plane = getPlane(codePoint);
            switch(plane) {
            case(0):
                bDigit = CharacterData00.isDigit(codePoint);
                break;
            case(1):
                bDigit = CharacterData01.isDigit(codePoint);
                break;
            case(2):
                bDigit = CharacterData02.isDigit(codePoint);
                break;
            case(3): // Undefined
            case(4): // Undefined
            case(5): // Undefined
            case(6): // Undefined
            case(7): // Undefined
            case(8): // Undefined
            case(9): // Undefined
            case(10): // Undefined
            case(11): // Undefined
            case(12): // Undefined
            case(13): // Undefined
                bDigit = CharacterDataUndefined.isDigit(codePoint);
                break;
            case(14):
                bDigit = CharacterData0E.isDigit(codePoint);
                break;
            case(15): // Private Use
            case(16): // Private Use
                bDigit = CharacterDataPrivateUse.isDigit(codePoint);
                break;
            default:
                // the argument's plane is invalid, and thus is an invalid codepoint
                // bDigit remains false;
                break;                          
            }
        }
        return bDigit;
    }

Gruss
slowy