2016-10-27 8 views
0

Я пытаюсь выяснить, как найти процентную разницу между исходной (без пробела) строкой текста и текстом без помех (без пробела). Я пытаюсь сделать это, используя уравнение ((newAmount-reducedAmount)/reducedAmount), но мне не повезло, и я получаю нулевое значение, как показано ниже.Java: поиск процентной разницы

Спасибо!

Мой код:

import java.util.Scanner; 

public class Prog5 { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Scanner console = new Scanner(System.in); 

     System.out.println("Welcome to the disemvoweling utility!"); // Initially typed "disemboweling" xD 
     System.out.print("Enter text to be disemvoweled: "); 
     String inLine = console.nextLine(); 
     String vowels= inLine.replaceAll("[AEIOUaeiou]", ""); // RegEx for vowel control 
     System.out.println("Your disemvoweled text is: " + vowels); // Prints disemvoweled text 

    // Used to count all characters without counting white space(s) 
    int reducedAmount = 0; 
    for (int i = 0, length = inLine.length(); i < length; i++) { 
     if (inLine.charAt(i) != ' ') { 
      reducedAmount++; 
     } 
    } 

    // newAmount is the number of characters on the disemvoweled text without counting white space(s) 
    int newAmount = 0; 
    for (int i = 0, length = vowels.length(); i < length; i++) { 
     if (vowels.charAt(i) != ' ') { 
      newAmount++; 
     } 
    } 

    int reductionRate = ((newAmount - reducedAmount)/reducedAmount); // Percentage of character reduction 


    System.out.print("Reduced from " + reducedAmount + " to " + newAmount + ". Reduction rate is " + reductionRate + "%"); 

    } 
} 

Мой выход: (Test строка без кавычек: "Testing пожалуйста")

Welcome to the disemvoweling utility! 

Enter text to be disemvoweled: Testing please 

Your disemvoweled text is: Tstng pls 

Reduced from 13 to 8. Reduction rate is 0% 
+2

Поскольку вы используете 'int', пожалуйста, измените' INT reductionRate = ((newAmount - reducedAmount)/reducedAmount); 'to' dobule reductionRate = ((double) (newAmount - reducedAmount)/reducedAmount); ' – BlackMamba

ответ

0

Вы использовали целочисленный тип данных при вычислении процентной разницы при выполнении целочисленного деления. Вам нужно набрать одну из переменных в правой части уравнения для выполнения двойного деления, а затем сохранить их в двойном. Причиной для этого является целочисленный тип java, который не может содержать действительные числа. Кроме того, несколько процентов на 100, чтобы получить процент.

double reductionRate = 100 * ((newAmount - reducedAmount)/(double)reducedAmount); 

Если вы хотите фракцию от 0 до 1, то

double reductionRate = ((newAmount - reducedAmount)/(double)reducedAmount); 
+1

Я заткнулся и не собрался, чтобы просто умножить на -100, я должен был сделать перерыв вместо того, чтобы расстраиваться. Спасибо, хотя это имеет смысл! – Aramza

-1

Ваша формула дает значение между нулем и единицей.

Целое число не может содержать дроби, поэтому оно всегда показывает нуль.

Умножьте на 100, чтобы получить постоянное процентное значение.

int reductionRate = 100*(newAmount - reducedAmount)/reducedAmount; // Percentage of character reduction 
+2

reduceRate должен быть двойным справа? –

+0

@NirajPatel Почему это должно быть двойным? Если он хочет округленное число от 0 до 100, он не должен быть двойным. ОП не проявлял интереса к дробной части. –