2015-04-24 2 views
0

Я работаю над оператором Switch в цикле. Я хочу добавить имена и назначить письма этим именам, а затем распечатать общее значение в соответствии с буквами. Проблема в том, что он не будет читать назначенные значения для букв, как вы можете видеть в моем коде ниже. Например, для Майка я назначил 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 
+0

'letter = letter + input.nextLine() +" \ n "' приведет к удару вашего случая по умолчанию каждый раз в вашем операторе switch. Почему вы добавляете символ новой строки? И затем на второй итерации «письмо» станет конкатенацией ваших двух входов и так далее. – mstbaum

+0

просто для того, чтобы отделить от вопроса, чтобы поставить эти значения под друг друга. – Ivanko

+0

'letter' должно содержать только ваше входное значение, а затем вы можете добавить это в String, если вам нужно – mstbaum

ответ

0

Ответ должен быть примерно таким.

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); 

} 

} 

Это должно быть то, что вы ищете.

Если бы сделать следующие изменения

totalvalue=totalvalue + lettervalue*fixedvalue; 
moved the totalValue within the for loop 
created a new variable letters to be the set of all the letters read. 
+0

Теперь я вижу. Мне приходилось вычислять буквы, используя новые строковые буквы, которые я не делал, и плюс я не вычислял totalvalue, поскольку он не был в цикле, и я установил его неправильно. Этот способ действительно работает хорошо. Хорошая помощь, спасибо большое! – Ivanko

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); 
+0

Это тоже работает. С String.valueOf() мы конкатенируем буквы и получаем значение lettervalue? никогда не использовал String.valueof до этого, почему я спрашиваю. – Ivanko

+0

'String.valueOf()' в основном принимает 'Numeric' и преобразует его в' String'. На самом деле я не думаю, что это необходимо. Сделано редактирование. – mstbaum

+0

Хорошо. Я буду играть больше с String.valueOf(). Вы имели в виду, что нет необходимости использовать String.valuOf в этом примере? – Ivanko