Хотя цикл повторяется слишком много раз - PullRequest
0 голосов
/ 04 октября 2018

Я первый год в области компьютерных наук и сейчас прохожу курс программирования на Java.Это первый язык программирования, который я когда-либо пробовал изучать, и я полностью застрял.Я должен был разработать программу для класса, которая берет номер кредитной карты, введенный пользователем, и определяет, является ли он действительным.Я как-то испортил свои петли, и теперь все повторяется как минимум в 5 раз больше, чем мне нужно.Как я мог это исправить?Это должно к 3:00, и я волнуюсь.Вот мой код:

package osu.cse1223;

import java.util.Scanner;

public class Project07 {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Scanner in = new Scanner(System.in);

    System.out.print("Enter a credit card number (enter a blank line to quit):");
    String cardNumber = in.nextLine();

    int length = cardNumber.length();

    if (length != 16 && length > 0) {
        System.out.print("ERROR! Number MUST have exactly 16 digits");
    }
    else if (length <= 0) {
        System.out.println("Goodbye!");
    }
    else {
        char checkDigitChar = cardNumber.charAt(15);
        int checkDigit = Character.getNumericValue(checkDigitChar);

        int pos = 0;
        while (pos < 16) {
            char digit = cardNumber.charAt(pos);
            int number = Character.getNumericValue(digit);
            int doubled = number * 2;
            pos = pos + 2;
            int sum = 0;
            if (doubled > 9) {
                String sub = Integer.toString(doubled);
                char one = sub.charAt(0);
                char two = sub.charAt(1);
                int numOne = Character.getNumericValue(one);
                int numTwo = Character.getNumericValue(two);
                int doubleAdjusted = numOne + numTwo;
                sum = sum + doubleAdjusted;
            }
            else {
            }
            int newPos = 1;
            int newSum = 0;
            while (newPos < 16) {
                char digitForSum = cardNumber.charAt(newPos);
                int individualNum = Character.getNumericValue(digitForSum);
                newPos = newPos + 2;
                newSum = individualNum + newSum;
            }

            int total = sum + newSum;
            String subTwo = Integer.toString(total);
            char onesPlace = subTwo.charAt(1);
            int ones = Character.getNumericValue(onesPlace);
            int realCheckDigit = 10 - ones;

            System.out.println("Check digit should be: " + realCheckDigit);
            System.out.println("Check digit is: " + checkDigit);

            if (checkDigit == realCheckDigit) {
                System.out.println("Number is valid");
            }
            else {
                System.out.println("Number is not valid");
            }
        }

        }
    }
}

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Этот цикл повторяется 8 раз, но на самом деле его следует остановить после первого цикла.Есть два способа сделать это.Во-первых, вы можете добавить «перерыв»;в конце последнего цикла.Во-вторых, вы вообще не можете использовать цикл while (pos <16) {}.Оба варианта дадут вам одинаковый результат. </p>

Вот вариант:

public class Various {

public static void main(String[] args) {
// TODO Auto-generated method stub
int sum = 0;
@SuppressWarnings("resource")
Scanner in = new Scanner(System.in);

System.out.println("Enter a credit card number (enter a blank line to quit):");
String cardNumber = in.nextLine();

int length = cardNumber.length();

if (length != 16 && length > 0) {
    System.out.print("ERROR! Number MUST have exactly 16 digits");
}
else if (length <= 0) {
    System.out.println("Goodbye!");
}
else {
    char checkDigitChar = cardNumber.charAt(15);
    int checkDigit = Character.getNumericValue(checkDigitChar);

    int pos = 0;
//        while (pos < 16) {
        char digit = cardNumber.charAt(pos);
        int number = Character.getNumericValue(digit);
        int doubled = number * 2;
//            pos = pos + 2;

        if (doubled > 9) {
            String sub = Integer.toString(doubled);
            char one = sub.charAt(0);
            char two = sub.charAt(1);
            int numOne = Character.getNumericValue(one);
            int numTwo = Character.getNumericValue(two);
            int doubleAdjusted = numOne + numTwo;
            sum = sum + doubleAdjusted;
        }

        else {
        }

        int newPos = 1;
        int newSum = 0;
        while (newPos < 16) {
            char digitForSum = cardNumber.charAt(newPos);
            int individualNum = Character.getNumericValue(digitForSum);
            newPos = newPos + 2;
            newSum = individualNum + newSum;
        }

        int total = sum + newSum;
        String subTwo = Integer.toString(total);
        char onesPlace = subTwo.charAt(1);
        int ones = Character.getNumericValue(onesPlace);
        int realCheckDigit = 10 - ones;

        System.out.println("Check digit should be: " + realCheckDigit);
        System.out.println("Check digit is: " + checkDigit);


        if (checkDigit == realCheckDigit) {
            System.out.println("Number is valid");
        }
        else {
            System.out.println("Number is not valid");
        }
//            break;
//        }
       }

    }
  }
0 голосов
/ 04 октября 2018

Вы не заканчиваете свой первый цикл в нужном месте.

int doubleAdjusted = numOne + numTwo;
sum = sum + doubleAdjusted;
}
else {
}
}// ADD THIS TO END THE FIRST WHILE LOOP

И удалите } из нижней части кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...