Импорт java.util.List сталкивается с другой ошибкой оператора импорта [duplicate]

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

parseFloat((0.1 + 0.2).toFixed(10)) => Will return 0.3

Позвольте мне объяснить, почему это лучшее решение. Как упоминалось выше в других ответах, рекомендуется использовать готовые для использования функции Javascript toFixed () для решения проблемы. Но, скорее всего, вы столкнетесь с некоторыми проблемами.

Представьте, что вы собираетесь добавить два числа с плавающей запятой, такие как 0.2 и 0.7, вот оно: 0.2 + 0.7 = 0.8999999999999999.

Ваш ожидаемый результат 0.9 означает, что в этом случае вам нужен результат с точностью до 1 цифры. Поэтому вы должны были использовать (0.2 + 0.7).tofixed(1), но вы не можете просто указать определенный параметр toFixed (), поскольку он зависит от заданного числа, например

`0.22 + 0.7 = 0.9199999999999999`

. В этом примере вам нужна точность в 2 цифры так что это должно быть toFixed(2), так что должно быть параметром для каждого заданного числа с плавающей запятой?

Вы могли бы сказать, что пусть это будет 10 в каждой ситуации:

(0.2 + 0.7).toFixed(10) => Result will be "0.9000000000"

Черт! Что вы собираетесь делать с этими нежелательными нулями после 9? Пришло время преобразовать его в float, чтобы сделать его по вашему желанию:

parseFloat((0.2 + 0.7).toFixed(10)) => Result will be 0.9

Теперь, когда вы нашли решение, лучше предложить его как функцию:

function floatify(number){
       return parseFloat((number).toFixed(10));
    }
 
function addUp(){
  var number1 = +$("#number1").val();
  var number2 = +$("#number2").val();
  var unexpectedResult = number1 + number2;
  var expectedResult = floatify(number1 + number2);
  $("#unexpectedResult").text(unexpectedResult);
  $("#expectedResult").text(expectedResult);
}
addUp();
input{
  width: 50px;
}
#expectedResult{
color: green;
}
#unexpectedResult{
color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="number1" value="0.2" onclick="addUp()" onkeyup="addUp()"/> +
<input id="number2" value="0.7" onclick="addUp()" onkeyup="addUp()"/> =
<p>Expected Result: <span id="expectedResult"></span></p>
<p>Unexpected Result: <span id="unexpectedResult"></span></p>

Вы можете использовать его следующим образом:

var x = 0.2 + 0.7;
floatify(x);  => Result: 0.9
83
задан Luiggi Mendoza 24 February 2016 в 00:35
поделиться

10 ответов

Вы можете опустить инструкции импорта и ссылаться на них, используя весь путь. Например:

java.util.Date javaDate = new java.util.Date()
my.own.Date myDate = new my.own.Date();

Но я бы сказал, что использование двух классов с одинаковыми именами и аналогичной функцией обычно не является лучшей идеей, если вы не можете четко ее понять, что есть.

118
ответ дан Ellie P. 31 August 2018 в 15:49
поделиться

Вы можете импортировать один из них с помощью импорта. Для всех других подобных классов вам необходимо указать Полноценные имена классов. В противном случае вы получите ошибку компиляции.

Например:

import java.util.Date;

class Test{

  public static void main(String [] args){

    // your own date
    my.own.Date myOwndate ;

    // util.Date
    Date utilDate;
  }
}
3
ответ дан Anuraj 31 August 2018 в 15:49
поделиться

У меня была такая же проблема, что и я, я упорядочил порядок библиотек в последовательности, например, были java.lang.NullPointerException и javacard.lang.NullPointerException. Я сделал первую в качестве библиотеки по умолчанию, и если вам нужно использовать другую, вы можете явно указать полное имя класса.

0
ответ дан Bondhan Novandy 31 August 2018 в 15:49
поделиться

Другой способ сделать это - подкласс it:

package my.own;

public class FQNDate extends Date {

}

И затем импортировать my.own.FQNDate в пакетах с java.util.Date.

8
ответ дан Cheruvim 31 August 2018 в 15:49
поделиться
15
ответ дан Chii 31 August 2018 в 15:49
поделиться

Да, когда вы импортируете классы с одинаковыми простыми именами, вы должны ссылаться на них по их полностью квалифицированным именам классов. Я бы оставил инструкции импорта, поскольку он дает другим разработчикам представление о том, что находится в файле, когда они работают с ним.

java.util.Data date1 = new java.util.Date();
my.own.Date date2 = new my.own.Date();
8
ответ дан D.C. 31 August 2018 в 15:49
поделиться

Если вам действительно нужно или нужно использовать одно и то же имя класса из двух разных пакетов, у вас есть два варианта: 1-выбрать один для использования в импорте и использовать полное имя другого пользователя:

import my.own.Date;

class Test{

     public static void main(String[] args){

        // I want to choose my.own.Date here. How?
        //Answer:
        Date ownDate = new Date();

        // I want to choose util.Date here. How ?
        //Answer:
        java.util.Date utilDate = new java.util.Date();

     }
}

2 - всегда используйте полное имя класса:

//no Date import
class Test{

  public static void main(String[] args){

    // I want to choose my.own.Date here. How?
    //Answer:
     my.own.Date ownDate = new my.own.Date();
    // I want to choose util.Date here. How ?
    //Answer:
     java.util.Date utilDate = new java.util.Date();

  }
}
2
ответ дан manfall19 31 August 2018 в 15:49
поделиться

Если у вас есть собственный класс даты, вы должны отличить его от встроенного класса Date. то почему вы создали свой собственный. Что-то вроде ImmutableDate или BetterDate или NanoDate, даже MyDate укажет, почему у вас есть свой собственный класс даты. В этом случае они будут иметь уникальное имя.

2
ответ дан Peter Lawrey 31 August 2018 в 15:49
поделиться

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

Полностью квалифицированный - это один из способов. Похоже, что на самом деле вы не можете включать оба оператора импорта, потому что Java беспокоится о том, что означает «Person», например.

2
ответ дан Randy Wilson 31 August 2018 в 15:49
поделиться

Этот сценарий не так распространен в реальном программировании, но не слишком странный. Иногда бывает, что два класса в разных пакетах имеют одно и то же имя, и нам нужны оба из них.

Не обязательно, что если два класса имеют одинаковое имя, то оба будут содержать одинаковые функции, и мы должны выбрать только один из них.

Если нам нужны оба, тогда нет никакого вреда в использовании этого. И это тоже неплохая идея программирования.

Но мы должны использовать полностью квалифицированные имена классов (имеющих одно и то же имя), чтобы дать понять, к какому классу мы тоже обращаемся.

:)

2
ответ дан Yatendra Goel 31 August 2018 в 15:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: