【问题标题】:Switch in loop to print out values循环切换以打印出值
【发布时间】:2015-04-24 20:32:21
【问题描述】:

我正在循环处理 Switch 语句。我想添加名称并为这些名称分配字母,然后根据字母打印出总值。问题是它不会读取字母的分配值,正如您在下面的代码中看到的那样。例如,对于 Mike,我分配了 A,A 的值为 10。对于 Joe,我分配了 B,B 的值为 7。所以我需要 A+B 的总值乘以固定值 3,即是 51。我肯定做错了什么,我想知道是否可以不使用对象和其他方法来做到这一点。

import java.util.Scanner;
public class TotalScore {

public static void main(String[] args) {
    double lettervalue = 0,fixedvalue=3,totalvalue;
    int count,repeatcount;
    String valuename = "";
    String letter="";


Scanner input = new Scanner(System.in);
System.out.print("How many values do you want to process? ");
count=input.nextInt();
input.nextLine();

for(repeatcount=0;repeatcount<count;++repeatcount){

System.out.print("Enter name for value " +(repeatcount+1)+" ");
valuename = valuename+input.nextLine()+"\n";
System.out.print("Enter letter A,B,C or D for named value ");
letter = letter+input.nextLine()+"\n";


switch(letter){
    case "A":case"a": lettervalue=10.0;
        break;
    case "B":case"b": lettervalue=7.0;
        break;

    case "C":case"c": lettervalue=5.0;
        break;
    case "D":case"d": lettervalue=2.0;
        break;
    default: lettervalue=0;



}

}
totalvalue=lettervalue*fixedvalue;
System.out.println("The value names are\n "+valuename);
System.out.println("The letter values you entered are\n "+letter);
System.out.println("The total value is "+totalvalue);



}

}

Output:
How many values do you want to process? 2
Enter name for value 1 Mike
Enter letter A,B,C or D for named value A
Enter name for value 2 Joe
Enter letter A,B,C or D for named value B
The value names are
   Mike
   Joe

The letter values you entered are
   A
   B

The total value is 0.0

【问题讨论】:

  • letter = letter+input.nextLine()+"\n" 会导致您在 switch 语句中每次都使用默认大小写。为什么要附加换行符?然后在第二次迭代中,letter 将是您的两个输入的连接,依此类推。
  • 只是为了与问题分开,将这些值放在一起。
  • letter 应该只包含您的输入值,然后您可以根据需要将其附加到字符串
  • 我想做的就是拥有像 Mike A 10 和 Joe B 7 这样的东西
  • 然后计算A和B并乘以3

标签: java loops switch-statement assign


【解决方案1】:

letter 应该只包含您的输入值。然后你可以有一个单独的字符串来跟踪你的总输入。

String inputs = "";
String letter = "";

/*for loop etc.*/
letter = input.nextLine();

/*switch statement*/

inputs += valuename + letter + lettervalue + "\n";  //String.valueOf() is not necessary
totalvalue += lettervalue * fixedvalue;

/*end loop*/

System.out.println(inputs);

【讨论】:

  • 这也有效。使用 String.valueOf() 我们连接字母并获取 lettervalue 的值?这就是我问的原因之前从未使用过 String.valueof。
  • String.valueOf() 基本上采用Numeric 并将其转换为String。其实我觉得没必要。进行了编辑。
  • 好的。我将更多地使用 String.valueOf()。你的意思是在这个例子中没有必要使用 String.valuOf ?
  • 其实我觉得没必要用。您可以与 int 连接。
  • 知道了。我将更多地查看 String.valueOf() 以获取其他一些示例。当您可以将数字转换为字符串时,它很有用。
【解决方案2】:

答案应该是这样的。

import java.util.Scanner;
public class TotalScore {

public static void main(String[] args) {
double lettervalue = 0,fixedvalue=3,totalvalue = 0.0;
int count,repeatcount;
String valuename = "";
String letter="";
String letters="";


Scanner input = new Scanner(System.in);
System.out.print("How many values do you want to process? ");
count=input.nextInt();
input.nextLine();

for(repeatcount=0;repeatcount<count;++repeatcount){

System.out.print("Enter name for value " +(repeatcount+1)+" ");
valuename = valuename+input.nextLine()+"\n";
System.out.print("Enter letter A,B,C or D for named value ");
letter = input.nextLine();
letters = letters+letter;

switch(letter){
case "A":case"a": lettervalue=10.0;
    break;
case "B":case"b": lettervalue=7.0;
    break;

case "C":case"c": lettervalue=5.0;
    break;
case "D":case"d": lettervalue=2.0;
    break;
default: lettervalue=0;



}
totalvalue=totalvalue + lettervalue*fixedvalue;
}

System.out.println("The value names are\n "+valuename);
System.out.println("The letter values you entered are\n "+letters);
System.out.println("The total value is "+totalvalue);

}

}

这应该是你要找的。​​p>

必须进行以下更改

1

totalvalue=totalvalue + lettervalue*fixedvalue;

2

moved the totalValue within the for loop

3

created a new variable letters to be the set of all the letters read.

【讨论】:

  • 好的,我现在知道了。我必须使用我没有做的新字符串字母来计算字母,而且我没有计算总值,因为它不在循环中并且我设置错误。这种方式实际上效果很好。很好的帮助,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-06-07
  • 2018-03-04
  • 2014-09-03
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多