Moon Moon Chatterjee Ответов: 2

Сумма определенных символов из входной строки


Список продуктовых товаров представлен следующим образом: Рис=2 Пшеница=4 масло=10 керосин=5 которые сокращаются на R,O,W,K. Пример ввода - ORW
Выход=16.

Я попробовал приведенный ниже код и получаю вывод для ORW как
10
12
16
Как я могу это исправить?

Что я уже пробовал:

import java.util.*;
 public class Main{
     public static void main (String[] args) {
         Scanner sc=new Scanner(System.in);
         String st=sc.nextLine();
         char[] y=st.toCharArray();
         int size=y.length;
         int sum=0;
         int countr=0;
         int counto=0;
         int countw=0;
         int countk=0;
         int i=0;
         while(i!=size)
         {
             if(y[i]>='A' && y[i]<='Z')
             {
                 if(y[i]=='O')
                 {
                     sum+=10;
                     ++counto;
                     
                 }
                 else if(y[i]=='R')
                 {
                     sum+=2;
                     ++countr;
                    
                 }
                 else if(y[i]=='W')
                 {
                     sum+=4;
                     ++countw;
                     
                 }
                 else if(y[i]=='K')
                 {
                     sum+=5;
                     ++countk;
                 }
                 
                 else
                 {
                     System.out.println("Invalid");
                     
                 }
                 
                ++i;
                
                 
             }
             if(counto>1 || countw>1 || countr>1 || countk>1 )
             {
                 System.out.println("Duplicates");
             }
             else
             {
                 System.out.println(sum);
             }
             
             }
     }
     }

2 Ответов

Рейтинг:
7

OriginalGriff

Вместо большого if...else if ... else создайте, рассмотрите возможность использования switch вместо этого: это намного эффективнее, и это легче читать: Ява Переключатель[^]

Что касается вопроса "Как я могу это исправить?", то здесь нет ничего, что можно было бы исправить в соответствии с вашими правилами:

Running Total
O   10   10
R    2   12
W    4   16
  + __   __
    16   16
Если вы хотите видеть только итоговую сумму, то переместите свой код печати за пределы цикла...


CPallini

5.

Рейтинг:
19

Richard MacCutchan

Вы печатаете значение суммы каждый раз вокруг цикла while. Вам также не нужно проверять, является ли каждый символ буквой, так как вы принимаете только K,O,R или W в следующих тестах. Так и должно быть:

import java.util.*;

public class Main{
public static void main (String[] args) {
    Scanner sc=new Scanner(System.in);
    String st=sc.nextLine();
    char[] y=st.toCharArray();
    int size=y.length;
    int sum=0;
    int countr=0;
    int counto=0;
    int countw=0;
    int countk=0;
    int i=0;
    while(i!=size)
    {
        if(y[i]=='O')
        {
            sum+=10;
            ++counto;
        }
        else if(y[i]=='R')
        {
            sum+=2;
            ++countr;
        }
        else if(y[i]=='W')
        {
            sum+=4;
            ++countw;
        }
        else if(y[i]=='K')
        {
            sum+=5;
            ++countk;
        }
        else
        {
            System.out.println("Invalid");
        }
        ++i;
    }
    if(counto>1 || countw>1 || countr>1 || countk>1 )
    {
        System.out.println("Duplicates");
    }
    else
    {
        System.out.println(sum);
    }
}


Еще два замечания:
1. важность четкого отступа и соответствия фигурных скобок.
2. Внимательно посмотрите, как работает ваш код, или используйте отладчик, чтобы пройти через него.


CPallini

5.