Борьба на условиях ЕСЛИ - PullRequest
0 голосов
/ 17 октября 2018

Проблема, которую я хочу задать, состоит в том, что я не могу сделать часть E, но V работает, и я попробовал все, что мог, чтобы понять, что происходит в моей логике ... Пожалуйста, помогите мне сделать'E' работает.

import java.util.Scanner;

public class Service {

    public static void main(String args[]) {
        String service;
        float monthV, usaV, ausV, rusV, callV;
        float monthE, usaE, ausE, rusE, callE;

        Scanner input = new Scanner(System.in);

        System.out.print("Which service did you use for the calls?<V - Vartec, E - Eircom> :   ");
        service = input.nextLine();

        if (service.charAt(0) != 'E')
            if (service.charAt(0) != 'V') {
                System.out.println("Thank you for your time...good bye.");
            } else {
                if (service.charAt(0) == 'V') {
                    System.out.print("\nPlease enter the total number of calls made in the month:   ");
                    monthV = input.nextFloat();

                    System.out.print("\nPlease enter the number of minutes spent calling the USA:   ");
                    usaV = input.nextFloat();
                    System.out.print("\nPlease enter the number of minutes spent calling the Australia:   ");
                    ausV = input.nextFloat();
                    System.out.print("\nPlease enter the number of minutes spent calling the Russia:   ");
                    rusV = input.nextFloat();
                    callV = ((usaV * 0.06f) + (ausV * 0.08f) + (rusV * 0.24f));
                    System.out.println("The total cost of using the Vartec service for the month is"
                            + String.format("%.2f", callV));
                } else {
                    if (service.charAt(0) == 'E') {
                        System.out.print("\nPlease enter the total number of calls made in the month:   ");
                        monthE = input.nextFloat();

                        System.out.print("\nPlease enter the number of minutes spent calling the USA:   ");
                        usaE = input.nextFloat();
                        System.out.print("\nPlease enter the number of minutes spent calling the Australia:   ");
                        ausE = input.nextFloat();
                        System.out.print("\nPlease enter the number of minutes spent calling the Russia:   ");
                        rusE = input.nextFloat();
                        callE = ((usaE * 0.19f) + (ausE * 0.85f) + (rusE * 0.92f));
                        System.out.println("The total cost of using the Vartec service for the month is"
                                + String.format("%.2f", callE));
                    }
                }
            }
    }

Ответы [ 4 ]

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

Таким образом, подходы switch и else-if будут работать, и их будет просто отлаживать и читать.Но нужно знать, что проблема в задаваемом вопросе такова: if (service.charAt(0) != 'E') не имеет соответствия else.

. Итак, предположим, что случаи относятся к условию if (service.charAt(0) != 'E'):

дело 1 .Когда вы вводите V, вышеприведенное условие становится истинным, и поток переходит в этот if, и выполнение выполняется, как ожидается, для V.

case 2 .Когда вы вводите E, указанное выше условие становится ложным, поскольку входное значение действительно E - поэтому поток не идет в этом if, и код, написанный для E, никогда не выполняется (так как записано в * 1023)* внутри которого поток не идет), а так как у нас нет else части, следовательно, и программа будет остановлена.

Так что, если вы склонны использовать только if и не переключаться наисправьте реализацию, которую следует заменить if (service.charAt(0) != 'E') на

if (service.charAt(0) != 'E' && service.charAt(0) != 'V'){
            System.out.println("Thank you for your time...good bye.");
        } else {
             ... rest of the code as usual  
        }
0 голосов
/ 17 октября 2018

простой способ

char ch = service.charAt(0);

if (ch == 'E') {
   // do E
} else if (ch == 'V') {
    // do V
} else {
    // do neither E nor V - that is, BYE
}

немного больше расширенный (легче понять с большим количеством опций):

char ch = service.charAt(0);

switch (ch) {
    case 'E':
    case 'e':  // also handle lowercase
        // do E
        break;
    case 'V':
    case 'v':
        // do V
        break;
    // more options if needed
    default:
        // do neither of the above
        break;
}

Ваша проблема делает что-то вроде

if (ch != 'E') {
    // something else
    if (ch == 'E') {
        // will never enter here
     }
}

Примечание : вы также можете использовать переключатель со строками (если не используете очень старую версию Java):

// changed to uppercase, we don't mind the case of input
switch (service.toUpperCase()) {
    case "VARTEC":
        ....
    case "EIRCOM":
        ...
    default:
        // I don't understand the user!
        ...
}
0 голосов
/ 17 октября 2018

Нет необходимости во вложенных операторах if в вашем коде.

Простой

if(service.charAt(0)=='V') {
     // First char is V
} else if (service.charAt(0)=='E') {
     // First char is E
} else {
     // First char is neither V nor E
}

будет работать просто отлично.

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

Я полагаю, вы ссылаетесь на это, если

if (service.charAt(0)=='E')

, если да, этот никогда не верен, потому что вложен в этот

if (service.charAt(0)!='E')
...