簡體   English   中英

貨幣轉換器-為什么我的for循環開關無法正常工作? 當我運行我的代碼時,只有第一個for循環有效

[英]currency converter- why does my for loop in switch wont work? when i run my code only the first for loop works

`我必須編寫一個代碼,用戶將輸入美元金額和貨幣(將在其中轉換美元),例如15日元,其中15表示美元金額,而YEN是要轉換的位置。我的代碼僅在第一個中運行循環將掃描一個字符串並將其拆分,但是在第二個for循環中轉換將無法進行。

       for(i=0;i<=3;i++){
       temp = sc.nextLine();
       Temp = temp.split(" ");
    }

       for(i=0,j=1;i<=3;i+=2,j+=2){
           switch (Temp[j]) {
               case "PHP":
                   conversion = Double.parseDouble(Temp[i])*51.23;
                   System.out.println("$"+Temp[0]+" CONVERTS TO "+df.format(conversion)+" PHP.");
                   break;
               case "POUNDS":
                   conversion = Double.parseDouble(Temp[i])*0.84;
                   System.out.println("$"+Temp[2]+" CONVERTS TO "+df.format(conversion)+" POUNDS.");
                   break;
               case "LIRA":
                   conversion = Double.parseDouble(Temp[i])*2040;
                   System.out.println("$"+Temp[4]+" CONVERTS TO "+df.format(conversion)+" LIRA.");
                   break;
               case "FRANCS":
                   conversion = Double.parseDouble(Temp[i])*9.85;
                   System.out.println("$"+Temp[6]+" CONVERTS TO "+df.format(conversion)+" FRANCS.");
                   break;
               case "MARKS":
                   conversion = Double.parseDouble(Temp[i])*3.23;
                   System.out.println("$"+Temp[8]+" CONVERTS TO "+df.format(conversion)+" MARKS.");
                   break;
               case "YEN":
                   conversion = Double.parseDouble(Temp[i])*260;
                   System.out.println("$"+Temp[10]+" CONVERTS TO "+df.format(conversion)+" YEN.");
                   break;
               default:
                   ;
                   break;
           }
        System.out.println("Invalid input, Please try again");
       }

您可以省略第二個循環,並在第一個循環中包含switch語句:

  for(i=0;i<=3;i++)
  {
   temp = sc.nextLine();
   Temp = temp.split(" ");

       switch (Temp[1]) {
           case "PHP":
               conversion = Double.parseDouble(Temp[0])*51.23;
               System.out.println("$"+Temp[0]+" CONVERTS TO "+df.format(conversion)+" PHP.");
               break;
           // Other cases
           // ...
           // ...
           default:
               i--;
               System.out.println("Invalid input, Please try again");
       }
  }

如果要在轉換之前先讀取所有4輸入(每行1個輸入),則需要將它們存儲在StringArrayList ,然后將它們傳遞給循環。

        ArrayList<String> lines = new ArrayList<>();

        for(int i=0;i<=3;i++)
            lines.add(sc.nextLine());

        for(int i=0;i<=3;i++)
        {
            String Temp[] = lines.get(i).split(" ");

            switch (Temp[1]) {
                case "PHP":
                    conversion = Double.parseDouble(Temp[0])*51.23;
                    System.out.println(Temp[1]);
                    System.out.println("$"+Temp[0]+" CONVERTS TO "+df.format(conversion)+" PHP.");
                    break;
                // Other cases
                // ...
                // ...
                default:
                    continue;
                    //i--;
                    //System.out.println("Invalid input, Please try again");
            }

如果您的輸入是一行,則不需要兩個循環,則只需掃描一次

第二個循環可能不起作用,因為您重復i <= 3,同時似乎您輸入的內容多於4個項目。最好使用分割字符串的長度,並且只需要一個變量對其進行索引

    String temp = sc.nextLine().split(" ");
    double conversion;
    for (int i = 0; i < temp.length - 1; i +=2) {
        String amount = Double.parseDouble(temp[i]);
        String currency = temp[i+1];
        System.out.print("$"+amount+" CONVERTS TO ");

        switch (currency) {
            case "POUNDS":
               conversion = amount * (14.28/17);  // based on your comment, this isn't 51.23
               break;
        } 

        System.out.print(conversion + " " + currency);
        System.out.println();
    }

為了優化,最好使用Hashmap<String, Double>作為轉換率,而不是使用開關

您的for循環只能執行一次,因為每個switch case語句的末尾都有一個break語句。 正如其他人提到的那樣,您應該嘗試在沒有for循環的情況下執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM