2014-10-30 2 views
-1

Цель моей программы - принимать от пользователя ints, double и строки, а когда программа завершается путем ввода слова «quit», программа усредняет значения int и double, а выходы представленные строки. Вот то, что я до сих пор:Вывод нескольких строк со входа сканера

import java.util.*; 

public class Lab09 { 
    public static void main(String [] args) { 
     Scanner console = new Scanner(System.in); 

     double sumI = 0; 
     double sumD = 0; 
     String words = ""; 
     int numInputInt = 0; 
     int numInputDoub = 0; 
     do { 
      System.out.print("Enter something: "); 
      if (console.hasNextInt()) { 
       int numI = console.nextInt(); 

      if (numI >= -100 && numI <= 100) { 
       sumI += numI; 
       numInputInt++; 
      } 
      else { 
       System.out.println("Integer out of range!(-100 .. 100)"); 
      } 

      } 
     else if (console.hasNextDouble()) { 
      double numD = console.nextDouble(); 
      if (numD >= -10.0 && numD <= 10.0) { 
       sumD += numD; 
       numInputDoub++; 
      } 
      else { 
       System.out.println("Double out of range!(-10.0 .. 10.0)"); 
      } 

     } 
     else { 
      words = console.next(); 
     } 

     } while (!words.equalsIgnoreCase("quit")); 
     System.out.println("Program terminated..."); 
     double avgInt = sumI/numInputInt; 
     double avgDoub = sumD/numInputDoub; 

     if (numInputInt > 0) { 
     System.out.println("\tAveragae of Integers: " + avgInt); 
     } 
     else { 
     System.out.println("\tNo intergers submitted"); 
     } 
     if (numInputDoub > 0) { 
     System.out.println("\tAverage of Doubles: " + avgDoub); 
     } 
     else { 
     System.out.println("\tNo doubles submitted"); 
     } 
     System.out.println(words); 


    } 

} 

РАСЧ и парном обрабатываются хорошо, но им застрял в строках. Любые идеи о том, как это сделать? Спасибо заранее!

ответ

0

Вы можете использовать

String input = ""; 
do { 
    //... 
    } 
    else { 
     input = console.next();    
     words += input + " "; 
    } 
    console.nextLine(); // Read the carriage return 
} while (!input.equalsIgnoreCase("quit")); 
//... 
System.out.println(words.trim()); 

конкатенировать текст, но это довольно неэффективно, когда делается в цикле.

Лучшим решением было бы использовать StringBuilder ...

StringBuilder work = new StringBuilder(128); 
String input = ""; 
do { 
    //... 
    } 
    else { 
     input = console.next();    
     words.append(" ").append(input); 
    } 
    console.nextLine(); // Read the carriage return 
} while (!input.equalsIgnoreCase("quit")); 
//... 
System.out.println(words); 
+0

Спасибо, но я не могу использовать любые другие классы, кроме тех, которые я использовал – GPC

+0

'StringBuilder' о эффективно в цикл, поскольку вы не создаете «лоты» временного 'String', в противном случае первый пример должен вас запустить ... – MadProgrammer

+0

Кроме того, я бы не использовал' words' для проверки условия выхода, это будет только когда бы пользователь ввел 'quit' для первого слова ... – MadProgrammer

0

В то время как вы могли бы построить List<String> слова, похоже, вы просто хотите, чтобы сцепить каждое новое слово в String words как,

if (words.length() > 0) words += " "; // <-- add a space. 
words += console.next(); // <-- += not = 

Затем измените тест петли на что-то подобное,

while (!words.trim().toLowerCase().endsWith("quit")); 

И он должен работать так, как вы ожидали.

+0

случай te string« quit »не имеет значения, мне не нужно его в тестовом цикле правильно? – GPC

+0

Define * не имеет значения *. Если вы имеете в виду, что это всегда будет более строгим, тогда вы можете пропустить 'toLowerCase()' –

+0

Используя ваш метод, я получил бесконечный цикл – GPC

-1

Я только что прочитал ваш комментарий, что вы не можете использовать любой другой класс, попробуйте следующее:

import java.util.*; 

public class Lab09 { 
    public static void main(String [] args) { 
     Scanner console = new Scanner(System.in); 

     double sumI = 0; 
     double sumD = 0; 
     String words = ""; 
     int numInputInt = 0; 
     int numInputDoub = 0; 
     do { 
      System.out.print("Enter something: "); 
      if (console.hasNextInt()) { 
       int numI = console.nextInt(); 

      if (numI >= -100 && numI <= 100) { 
       sumI += numI; 
       numInputInt++; 
      } 
      else { 
       System.out.println("Integer out of range!(-100 .. 100)"); 
      } 

      } 
     else if (console.hasNextDouble()) { 
      double numD = console.nextDouble(); 
      if (numD >= -10.0 && numD <= 10.0) { 
       sumD += numD; 
       numInputDoub++; 
      } 
      else { 
       System.out.println("Double out of range!(-10.0 .. 10.0)"); 
      } 

     } 
     else { 
      words = words.concat(" ").concat(console.next()); 

     } 

     } while (!words.contains("quit")); 
     System.out.println("Program terminated..."); 
     double avgInt = sumI/numInputInt; 
     double avgDoub = sumD/numInputDoub; 

     if (numInputInt > 0) { 
     System.out.println("\tAveragae of Integers: " + avgInt); 
     } 
     else { 
     System.out.println("\tNo intergers submitted"); 
     } 
     if (numInputDoub > 0) { 
     System.out.println("\tAverage of Doubles: " + avgDoub); 
     } 
     else { 
     System.out.println("\tNo doubles submitted"); 
     } 
     System.out.println(words); 


    } 

} 
+0

Зачем использовать 'buffer.append (" "+ word);'? – MadProgrammer

+0

На самом деле, зачем использовать 'StringBuffer' вообще? – MadProgrammer

+0

Я не могу использовать другие методы класса для этой программы – GPC

Смежные вопросы