Wątek przeniesiony 2015-08-09 20:08 z Java przez bogdans.

Java kalkulator jednostek

0

Cześć

napisałem sobie taki programik który konwertuje jednostki miary, ale na koniec zamiast wyniku pokazywał 0 lub kilka errorów

import java.util.Scanner;



public class MeasureUnits
{
    public static void main(String args[]) 

    {
        
        
        
        
        
        
        

         Scanner value = new Scanner(System.in);
     System.out.println(" Write value: :");
     
     int wartość;
     wartość = value.nextInt();

     double yard, inch, foot, mile;
        double metr, decymetr , centymetr, kilometr;
        
            centymetr = 1;

            metr = 100 * centymetr;
            centymetr = 1;
            kilometr = centymetr * 100000;
            decymetr = 10 * centymetr;
            
            yard = (0.9144 * metr);
            inch = (2.54 * centymetr);
            mile = (1.609344 * kilometr);
            foot =  (30.48 * centymetr);

         Scanner input1 = new Scanner(System.in);
        System.out.println(" Choose one of measure units"
             + " 'yard' 'inch' 'feet'  'mile' :");

     
     String operation2 = input1.next();
     
     
     

    
        
        
      switch (operation2) {

          case "yard":
              System.out.println(operation2);
              break;
     case "inch":
     System.out.println(operation2);
     break;
         
     case "mile":
         System.out.println(operation2);
         break;
         
     case "foot":
         System.out.println(operation2);
         break;  
         
         
         
         
      }
      
    
{

         Scanner input2 = new Scanner(System.in);
        System.out.println(" Choose one of polish measure units"
             + " 'metr' 'centymetr' '=decymetr' 'kilometr' :");
    String operation = input2.next();
    
     int oper;
    oper = Integer.parseInt(operation2);
    

      switch (operation) {
          
          
          case "metr":
             System.out.println(oper
                     * wartość / 100);
              break;
              
     case "centymetr":
     System.out.println(oper * wartość / 100);
     break;
         
     case "kilometr":
         System.out.println(oper * wartość / 100000);
         break;
         
     case "decymetr":
         System.out.println(oper * wartość / 10);
         break;
      }
     }
    }
}

i errory

Exception in thread "main" java.lang.NumberFormatException: For input string: "yard"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at matura.MeasureUnits.main(MeasureUnits.java:84)
Java Result: 1
1
oper = Integer.parseInt(operation2);

operation2 to jest String. Gdyby był to String w postaci liczby to ok, ale Ty podajesz jednostkę miar np. "yard". Z takiego Stringa nie da się zrobić inta.

0

No to jak inaczej sobie poradzić z błędem first type string, second type int

0
skill1989 napisał(a):

No to jak inaczej sobie poradzić z błędem first type string, second type int

Wyrzuć to:

int oper;
oper = Integer.parseInt(operation2);

W operation2 masz Stringa, który określa jaka operacja ma zostać wykonana, czyli na jakiego typu wartość konwertować.

Integer.parseInt("yard")

nie zwróci Ci liczby. To jest bez sensu.

Zastanów się też nad tym co robisz w tym casie:

      switch (operation) {
 
 
          case "metr":
             System.out.println(oper
                     * wartość / 100);
              break;
 
     case "centymetr":
     System.out.println(oper * wartość / 100);
     break;
 
     case "kilometr":
         System.out.println(oper * wartość / 100000);
         break;
 
     case "decymetr":
         System.out.println(oper * wartość / 10);
         break;
      }

To jest bez sensu. Załóżmy, że wybrałeś metr. Ok. Przechodzimy do odpowiedniego bloku:

          case "metr":
             System.out.println(oper
                     * wartość / 100);
              break;

oper to String czyli ciąg znaków. Czyli masz operacje:

"metr" * wartość(typu int) / 100(typu int)
. Załóżmy, że podałeś na wstępie wartość 12 to otrzymujesz takie działanie:
"metr" * 12/ 100
. Jak z tego ma Ci wyjść wynik liczbowy? Przemyśl zasadę działania programu i postaraj się go lepiej zaprojektować.

0

No, ale co mam zrobić, żeby program zamiast "jednostka" * wartość / 100 obliczał wartość jednostki * wartość / 100?

0

Napisz to od nowa najlepiej, bo w aktualnym stanie ten program nie ma żadnego logicznego składu, używasz zmiennych tak jakbyś nie wiedział do czego je stworzyłeś. Wygląda jak bezsensowny zlepek masy innych kodów i w wielu miejscach wygląda to tak, jakbyś oczekiwał magicznych rzeczy od tego kodu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1