2014-10-03 2 views
0

Вот мой код:Недопустимая константа символов в Java?

import java.util.Scanner; 
import javax.swing.JOptionPane; 
import java.text.DecimalFormat; 

/* 

Medium Speed 
Air 1100 feet per second 
Water 4900 feet per second 
Steel 16,400 feet per second 

Write a program that asks the user to enter "air", "water", or "steel", and the distance that a sound wave will 
travel in the medium. The program should then display the amount of time it will take. 
You can calculate the amount of time it takes sound to travel in air with the following formula: 

Time = Distance/1100 
You can calculate the amount of time it takes sound to travel in water with the following formula: 

Time = Distance/4900 
You can calculate the amount of time it takes sound to travel in steel with the following formula: 

Time = Distance/16400 
*/ 

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


     String input; 
     char timeTraveled; 

     Scanner keyboard = new Scanner(System.in); 


     double distance; 
     double time; 
     double time2; 
     double time3; 
     time = (distance/ 1100); 
     time2 = (distance/ 4900); 
     time3 = (distance/ 16400); 
     DecimalFormat formatter = new DecimalFormat("#0.00"); 



       System.out.println("Enter air, water, or steel: "); 
       input = keyboard.nextLine(); 
       System.out.print("Enter distance: "); 
       distance = keyboard.nextDouble(); 



       switch(timeTraveled) 
       { 
       case 'air': 

       System.out.printf("The total time traveled is " + formatter.format(time) + "."); 
       break; 

       case "water": 


       System.out.printf("The total time traveled is " + formatter.format(time2) + "."); 
       break; 

       case "steel": 


       System.out.printf("The total time traveled is " + formatter.format(time3) + "seconds."); 
       timeTraveled = input.charAt(0); 
       break; 
       keyboard.close(); 
    } 
} // main() 
} // class SpeedOfSound 

Почему case 'air': дает мне ошибку invalid character constant дважды? У моего профессора есть другой пример для другой программы, и это почти то же самое, что и я, но он не получает ошибку. Почему я получаю эту ошибку?

+1

воздуха не символ –

+0

Эй спасибо парня за быстрый ответ, я починю бардак с timeTraveled, а Я следовал примеру моего профессора и забыл стереть эту часть. (удаление его ничего не делает). Кроме того, когда я помещаю кавычки вокруг воздушной воды и стали, это дает мне ошибку «Тип несоответствие, невозможно преобразовать из строки в символ» – justaregularguy

+0

Вы пытаетесь переключить (char) timeTraveled со смешанными типами. char и String. Вы не можете этого сделать. Объявить timeTraveled, чтобы напечатать String и обернуть воздух в двойных кавычках. –

ответ

0

В некоторых языках программирования одинарные кавычки (') и двойные кавычки (") являются взаимозаменяемыми. В Java (а также в C и C++) это не так.

Если вы хотите указать многосимвольный строковый литерал, используйте double цитаты: "air".

Кроме того, неясно, что ожидается, когда вы сравните char (timeTraveled) с строкой ("air").

+0

, но char timeTraveled is declaread as char. –

+0

@getlost swtich case не принимает char :) –

+1

@KickButtowski, что вы имеете в виду .. принимать чат .it принимать только примитивы.нето объекты –

-1

'air' использует одинарные кавычки. Одинарные кавычки обозначают символ постоянный. То, что вы ищете, это "air", a String постоянный.

Вы, кажется, новый программист. Я сделал некоторые улучшения в вашу программу, и я покажу вам их здесь:

import java.util.Scanner; 
import javax.swing.JOptionPane; 
import java.text.DecimalFormat; 

/* 
Medium Speed 
Air 1100 feet per second 
Water 4900 feet per second 
Steel 16,400 feet per second 

Write a program that asks the user to enter "air", "water", or "steel", and the distance that a sound wave will 
travel in the medium. The program should then display the amount of time it will take. 
You can calculate the amount of time it takes sound to travel in air with the following formula: 

Time = Distance/1100 
You can calculate the amount of time it takes sound to travel in water with the following formula: 

Time = Distance/4900 
You can calculate the amount of time it takes sound to travel in steel with the following formula: 

Time = Distance/16400 
*/ 

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

     char timeTraveled; //what is this even doing here? 

     Scanner scanner = new Scanner(System.in); 

     double time = (distance/ 1100); 
     double time2 = (distance/ 4900); 
     double time3 = (distance/ 16400); 
     DecimalFormat formatter = new DecimalFormat("#0.00"); 

       System.out.println("Enter air, water, or steel: "); 
       String material = scanner.nextLine(); 
       System.out.print("Enter distance: "); 
       double distance = scanner.nextDouble(); 

       switch (material) { 
        case "air": 
         System.out.printf("The total time traveled is " + formatter.format(time) + "."); 
         break; 

        case "water": 
         System.out.printf("The total time traveled is " + formatter.format(time2) + "."); 
         break; 

        case "steel": 
         System.out.printf("The total time traveled is " + formatter.format(time3) + "seconds."); 
         timeTraveled = material.charAt(0); //what is this even doing here? 
        break; 
       } 
       scanner.close(); 
    } // main() 
} // class SpeedOfSound 
  • Сделан интервал и отступы более последовательный
  • Переименован ваш объект сканера. «Клавиатура» не является подходящим названием для объекта Scanner, поскольку сканер работает не только с клавиатурным вводом, но и с вводом строки и файла.
  • я объединил декларацию вашего «время» переменные и определения

Э.Г.

double time; //a declaration of "time" 
time = (distance/ 1100); //a definition of "time" 
//becomes: 
double time = (distance/ 1100); //a declaration AND definition of "time" 
  • изменил 'air' к "air"», также, изменили переменную переключателя случай с„материал“(который раньше называли„вход“, и это строка, которая содержит ввод пользователя), а не него ? с помощью timeTraveled (? немного разного характер)

поскольку ваша программа только будет отображать один раз из трех возможностей, поэтому вычислить все 3 Я предлагаю вам переработать свой алгоритм следующим образом: Попросите пользователь для материала и расстояния, которое они хотят. Установите переменную «скорость» равную до 1100, 4900 или 16400 в зависимости от выбора пользователем воздуха, воды или стали. Затем вычислите время как расстояние/скорость.

Это избавит вас от повторения 3 идентичных System.out.println() заявления, избавляет вас от 3 временных переменных (если вам нужно только 1),

3

У вас есть несколько проблем здесь.

Во-первых, одинарные кавычки зарезервированы для одиночных символов, например 'a'. Целые строки должны быть помещены в двойные кавычки.

Во-вторых, timeTraveled никогда не назначается никому в любом случае к моменту его использования, поэтому он «может» не был инициализирован к тому времени, когда вы попытаетесь его запустить (и заставить вещи скомпилировать). Вероятно, вы, скорее всего, захотите использовать input.

Это говорит о том, до тех пор, пока вы используете Java 7 или более поздней версии, вы должны написать это в качестве переключателя аргумента:

switch(input) { 
    // statements to follow 
} 

Я не уверен, что это назначение в конце вашего "steel" дело предназначено, но вы можете полностью переместить свою логику из инструкции switch.

0

Я нашел несколько проблему в коде:

  1. Это должно быть "air" не 'air' (раствор для оп).
  2. Тип данных timeTraveled is char, но вы пытаетесь сопоставить его со строкой (например, «воздух», «вода» и т. Д.).
  3. timeTraveled не инициализирован.
  4. distance не инициализируется при расчетах для time, time1 & time2.
  5. keyboard.close(); - недостижимый код. Переместите его за пределы блока switch или добавьте его в корпус default.

В идеале вы должны использовать символы в корпусе коммутатора или создать enum для лучшей ясности.

+0

воздушная вода не может быть объявлена ​​как char .op обязательно должна использовать enum –

1

Я не понимаю логику этой программы. Если U необходимо ввести слово, а затем сделать что-то в зависимости от него пытается сделать что-то вроде

String timeTraveled; 
if (timeTraveled.equals("air")){ 
    //do something 
} else if (timeTraveled.equals("water")) { 
    //do something 
} ... 
+0

couse, это самый простой способ, чем перейти к перечислению –

+0

С Java 7 оба этих выражения эквивалентны (за исключением капитализации 'string', так как это Java, а не C#). – Makoto

+0

Не используйте 'if' /' else if'/'else' в ситуации, которая так хорошо подходит для' switch' – Alexander